asp.net-mvc – 在Asp.Net MVC 2中有一种更好的方法来返回401状态代码而无需获得auth重定向
|
我的网站的一部分有一个轻量级的xml / json REST API.我的大部分网站都在表单身份验证后面,但只有部分API操作需要身份验证. 我有一个用于我的API的自定义AuthorizeAttribute,用于检查某些权限,当它失败时会产生401.一切都很好,除非我使用表单auth,Asp.net方便地将其转换为302重定向到我的登录页面. 我已经看到一些以前的问题,似乎有点hackish要么返回403而不是在global.asax protected void Application_EndRequest()中放入一些逻辑 > Previous Question 我现在正在做的有点像其中一个问题,但不是检查Application_EndRequest()的302,而是让我的authorize属性返回666,这表明我需要将它设置为401. 这是我的代码: protected void Application_EndRequest()
{
if (Context.Response.StatusCode == MyAuthAttribute.AUTHORIZATION_FAILED_STATUS)
{
//check for 666 - status code of hidden 401
Context.Response.StatusCode = 401;
}
}
即使这有效,我的问题是Asp.net MVC 2中有什么东西会阻止我这么做吗?或者,一般来说有更好的方法吗?我认为对于那些做REST api的人或只是在他们的控制器中执行ajax请求的人来说,这会有很多.你想要的最后一件事是做一个请求并获取登录页面的内容而不是json. 解决方法如何使用自定义过滤器修饰控制器/操作:[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class,Inherited = true,AllowMultiple = true)]
public class RequiresAuthenticationAttribute : FilterAttribute,IAuthorizationFilter
{
public void OnAuthorization(AuthorizationContext filterContext)
{
var user = filterContext.HttpContext.User;
if (!user.Identity.IsAuthenticated)
{
filterContext.HttpContext.Response.StatusCode = 401;
filterContext.HttpContext.Response.End();
}
}
}
在你的控制器中: public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
[RequiresAuthentication]
public ActionResult AuthenticatedIndex()
{
return View();
}
} (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 你能在每个动作上在ASP.NET-MVC中应用ActionFilter吗?
- 如何在ASP.NET MVC中保留/保护Edit中的某些字段
- asp.net-mvc – Unity使用参数将依赖项注入MVC过滤器类
- asp.net – 设置Response.Status生成“HTTP状态字符串无效”
- asp.net-mvc – 特定便携式区域的ControllerFactory
- asp.net-mvc – 使用ASP.NET MVC导出数据到Excel文件4 C#正
- asp.net-core – 有没有办法使用NuGet或其他方式打包ASP.NE
- asp.net-mvc-4 – 如何在ASP.Net MVC 4中定义特定区域的布局
- 使用HttpModule Asp.net重定向URL
- asp.net-core – .Net 5中的调试设置
- asp.net-mvc – ASP.Net 5 project.json脚本命令
- asp.net核心 – MVC6是否支持预编译视图?
- Asp.Net:在iis中调试网站
- asp.net – 配置IIS服务器使用Aurelia框架并推送
- asp-classic – 是代码页65001和utf-8同样的东西
- asp.net – 单元测试操作过滤器 – 如何模拟View
- asp.net-core – 在ASP.NET Core 2.0中哪里可以找
- asp.net-mvc-3 – CopyAllFilesToSingleFolderFo
- asp.net – TeamCity可以使用sln2008构建运行程序
- asp.net-mvc – 部署AntiforgeryToken错误
