Осуществите Фильтр Действия на всех Действиях Контроллера (C# / ASP.NET MVC)

У Вас есть две проблемы. Во-первых, Opacity требует двойного, не десятичного значения. Компилятор говорит Вам что, в то время как существует преобразование между десятичным числом и дважды, это - явное преобразование, которое необходимо определить для него для работы. Второе - то, что TrackBar.Value целочисленное значение, и деление интервала интервалом приводит к интервалу, какому типу переменной Вы присваиваете его. В этом случае существует неявный бросок от интервала до десятичного числа или дважды - потому что нет никакой потери точности, когда Вы делаете бросок - таким образом, компилятор не жалуется, но значение, которое Вы получаете, всегда 0, по-видимому, так как trackBar.Value всегда меньше чем 5 000. Решение состоит в том, чтобы изменить Ваш код, чтобы использовать дважды (собственный тип для Непрозрачности) и сделать арифметику с плавающей точкой путем явного создания константы двойным - который будет иметь эффект продвижения арифметики - или кастинг trackBar.Value для удвоения, который сделает то же самое - или оба. О, и Вам не нужна промежуточная переменная, если она не использовала в другом месте. Мое предположение является компилятором, оптимизировал бы его далеко, так или иначе.

trackBar.Opacity = (double)trackBar.Value / 5000.0;
12
задан Alex 27 August 2009 в 21:33
поделиться

4 ответа

Запуск с jeef3 , я придумал это. Он может использовать дополнительную проверку ошибок и надежность, например, несколько действий с разделителями, но общая идея работает.

В вашем конкретном случае вы можете проверить значение сеанса и также решить вернуться из авторизации.

public class AuthorizeWithExemptionsAttribute : AuthorizeAttribute
{
    public string Exemption { get; set; }
    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        if (filterContext.RouteData.GetRequiredString("action") == Exemption)
            return;

        base.OnAuthorization(filterContext);
    }

}

Использование:

[AuthorizeWithExemptions(Roles="admin", ExemptAction="Index")]
public class AdminController : Controller
...
7
ответ дан 2 December 2019 в 05:54
поделиться

Может быть, попробовать добавить свойство кроме к вашему первому атрибуту?

[MyAuthenticate(Exempt="View")]
public class MyController : Controller
{
    public ActionResult Edit()
    {
        // Protected
    }

    public ActionResult View()
    {
        // Accessible by all
    }
}
3
ответ дан 2 December 2019 в 05:54
поделиться

Вы можете добавить атрибут в класс, чтобы он применялся ко всем методам этого класса

[Authenticate]
public class AccountController : Controller
{
    public ActionResult Index()
    {
        return View();
    }
}

Я не Не знаю, как исключить конкретный метод из атрибута уровня класса. Может быть, использовать отдельный контроллер для неаутентифицированных запросов?

2
ответ дан 2 December 2019 в 05:54
поделиться

Прочитайте мою статью о codeproject –

http://www.codeproject.com/KB/web-security/AuthorizeWithExemptions.aspx

В этой статье я предоставлю вам решение для защиты ASP Контроллеры приложения .NET MVC таким образом, чтобы все действия были защищены, кроме тех, которые вы определили как небезопасные.

сниппер из кода:

public override void OnAuthorization(AuthorizationContext filterContext)
{
    ActionDescriptor action = filterContext.ActionDescriptor;
    bool IsUnsecured = action.GetCustomAttributes(
                         typeof(UnsecuredActionAttribute), true).Count() > 0;

    //If doesn't have UnsecuredActionAttribute - then do the authorization
    filterContext.HttpContext.SkipAuthorization = IsUnsecured;

    base.OnAuthorization(filterContext);
}
7
ответ дан 2 December 2019 в 05:54
поделиться
Другие вопросы по тегам:

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