C#路由过滤器

时间:2015-03-27 11:57:58

标签: asp.net-mvc asp.net-mvc-4 routing

我想知道是否还有在Visual C#MVC中的路由之前添加过滤器。

我有一个Portal区域,我想检查用户是否登录是/否。

因此,人们可以访问Portal/Login,但如果他们尝试访问Portal/Orders或任何未经授权的内容,我希望能够将其重定向回Portal/Login

我使用过PHP Frameworks,而且我是ASP.NET MVC的新手。

2 个答案:

答案 0 :(得分:0)

[Authorze]是正确的方向,但我会编写一个自定义授权属性来处理重定向,让您远离Account内置的public class MyCustomAuthorizeAttribute : AuthorizeAttribute { protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext) { if (!filterContext.HttpContext.User.Identity.IsAuthenticated) { filterContext.Result = new RedirectResult("/controller_name/view_name"); } } protected override bool AuthorizeCore(HttpContextBase httpContext) { if (httpContext == null) throw new ArgumentNullException("httpContext"); if (!httpContext.User.Identity.IsAuthenticated) return false; if (httpContext.User.IsInRole("MyPreferredRole")) return true; return false; } } 控制器。我喜欢MVC / .NET是这样灵活的:)

你可以有以下几点:

[MyCustomAuthorize]

然后,在您的控制器中,您可以使用[Authorize]代替AuthorizeCore。可以根据您的要求自定义MyCustomAuthorize方法。我只是一个例子。例如,您可以将一些相关的参数传递给AuthorizeCore类的构造函数,并在{{1}}中验证这些参数。

答案 1 :(得分:0)

对于非核心WebAPI,您将从System.Web.Http.Filters.AuthorizationFilterAttribute继承自定义Authorization属性,并覆盖OnAuthorization。

using System.Web.Http.Controllers;
using System.Web.Http.Filters;
.
.
public class MyAuthorizeAttribute : AuthorizationFilterAttribute
{
    public override void OnAuthorization(HttpActionContext actionContext)
    { ... }
}

如果OnAuthorization中的代码结果是请求应被拒绝,请设置actionContext.Response。

actionContext.Response = new System.Net.Http.HttpResponseMessage(System.Net.HttpStatusCode.Unauthorized);

不设置响应将导致允许请求继续到路由。