Лучший способ реализовать регулировку запроса в ASP.NET MVC?

FOR /F "tokens=* USEBACKQ" %%F IN (`command`) DO (
SET var=%%F
)
ECHO %var%

Я всегда использую USEBACKQ, так что, если у вас есть строка для вставки или длинное имя файла, вы можете использовать свои двойные кавычки, не нажимая эту команду.

Теперь, если ваш вывод будет содержат несколько строк, вы можете это сделать

SETLOCAL ENABLEDELAYEDEXPANSION
SET count=1
FOR /F "tokens=* USEBACKQ" %%F IN (`command`) DO (
  SET var!count!=%%F
  SET /a count=!count!+1
)
ECHO %var1%
ECHO %var2%
ECHO %var3%
ENDLOCAL
208
задан Jarrod Dixon 22 August 2009 в 21:25
поделиться

3 ответа

Вот общая версия того, что мы использовали в Stack Overflow в течение прошлого года:

/// <summary>
/// Decorates any MVC route that needs to have client requests limited by time.
/// </summary>
/// <remarks>
/// Uses the current System.Web.Caching.Cache to store each client request to the decorated route.
/// </remarks>
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
public class ThrottleAttribute : ActionFilterAttribute
{
    /// <summary>
    /// A unique name for this Throttle.
    /// </summary>
    /// <remarks>
    /// We'll be inserting a Cache record based on this name and client IP, e.g. "Name-192.168.0.1"
    /// </remarks>
    public string Name { get; set; }

    /// <summary>
    /// The number of seconds clients must wait before executing this decorated route again.
    /// </summary>
    public int Seconds { get; set; }

    /// <summary>
    /// A text message that will be sent to the client upon throttling.  You can include the token {n} to
    /// show this.Seconds in the message, e.g. "Wait {n} seconds before trying again".
    /// </summary>
    public string Message { get; set; }

    public override void OnActionExecuting(ActionExecutingContext c)
    {
        var key = string.Concat(Name, "-", c.HttpContext.Request.UserHostAddress);
        var allowExecute = false;

        if (HttpRuntime.Cache[key] == null)
        {
            HttpRuntime.Cache.Add(key,
                true, // is this the smallest data we can have?
                null, // no dependencies
                DateTime.Now.AddSeconds(Seconds), // absolute expiration
                Cache.NoSlidingExpiration,
                CacheItemPriority.Low,
                null); // no callback

            allowExecute = true;
        }

        if (!allowExecute)
        {
            if (String.IsNullOrEmpty(Message))
                Message = "You may only perform this action every {n} seconds.";

            c.Result = new ContentResult { Content = Message.Replace("{n}", Seconds.ToString()) };
            // see 409 - http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
            c.HttpContext.Response.StatusCode = (int)HttpStatusCode.Conflict;
        }
    }
}

Пример использования:

[Throttle(Name="TestThrottle", Message = "You must wait {n} seconds before accessing this url again.", Seconds = 5)]
public ActionResult TestThrottle()
{
    return Content("TestThrottle executed");
}

Кэш ASP.NET работает как чемпион здесь - используя его, вы получаете автоматическую очистку ваших записей газа. И с нашим растущим трафиком мы не видим, что это проблема на сервере.

Не стесняйтесь оставлять отзывы об этом методе; когда мы сделаем Stack Overflow лучше, вы получите исправление Ewok еще быстрее :)

Не стесняйтесь оставлять отзывы об этом методе; когда мы сделаем Stack Overflow лучше, вы получите исправление Ewok еще быстрее :)

Не стесняйтесь оставлять отзывы об этом методе; когда мы сделаем Stack Overflow лучше, вы получите исправление Ewok еще быстрее :)

236
ответ дан 23 November 2019 в 04:41
поделиться

Microsoft имеет новое расширение для IIS 7 под названием Динамическое Расширение Ограничений IP для IIS 7.0 - Бета.

"Динамические Ограничения IP для IIS 7.0 модуль, который обеспечивает защиту против атак "отказ в обслуживании" и атак перебором веб-сервера и веб-сайтов. Такая защита обеспечена путем временного блокирования IP-адресов клиентов HTTP, которые делают необычно высокое количество параллельных запросов или кто делает большое количество запросов за маленький промежуток времени". http://learn.iis.net/page.aspx/548/using-dynamic-ip-restrictions/

Пример:

при установке критериев для блокирования после X requests in Y milliseconds или X concurrent connections in Y milliseconds, IP-адрес будет заблокирован для Y milliseconds тогда, запросы будут разрешены снова.

68
ответ дан Amicable 23 November 2019 в 04:41
поделиться

Мы используем технику, одолженную от этого URL http://www.codeproject.com/KB/aspnet/10ASPNetPerformance.aspx, не для регулировки, а для Отказа в обслуживании бедного человека (D.O.S). Это также основано на кэше, и может быть подобно тому, что Вы делаете. Вы регулируете для предотвращения нападений D.O.S.? Маршрутизаторы могут, конечно, использоваться для сокращения D.O.S; Вы думаете, что маршрутизатор мог обработать регулировку, Вам нужно?

11
ответ дан Rob Kraft 23 November 2019 в 04:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: