我在MVC(Asp.net 4.5.2)中的ApiController下实现了api。在那个api中,我想使用HttpResponseMessage(HttpStatusCode.Unauthorized)抛出HttpResponseException并指定ReasonPhrase。如何将这个直接发送到客户端而不是让asp / mvc尝试将它们重定向到登录页面?
答案 0 :(得分:1)
var message = new HttpResponseMessage(HttpStatusCode.Unauthorized);
message.ReasonPhrase = "Hello";
throw new HttpResponseException(message);
但重定向取决于Web.config设置。我认为你在web.config中有认证部分,可以这样思考:
<system.web>
<authentication mode="Forms">
<forms loginUrl="/Login/Index"></forms>
</authentication>
</system.web>
如果删除此部分,则重定向不会发生。但在这种情况下,您应该自己实现身份验证。
答案 1 :(得分:0)
Asp.Net表单身份验证模块将401转换为302
如果您使用UseCookieAuthentication,请通过更改OnApplyRedirect来抑制此问题
文件Startup.Auth.cs - &gt; 在app.UseCookieAuthentication中的ConfigureAuth方法 - &gt; (新CookieAuthenticationOptions {Provider = new CookieAuthenticationProvider { - - &gt; 添加OnApplyRedirect
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
Provider = new CookieAuthenticationProvider
{
OnApplyRedirect = context =>
{
if (!context.Request.Uri.LocalPath.StartsWith(VirtualPathUtility.ToAbsolute("~/api")))
{
context.Response.Redirect(context.RedirectUri);
}
}
}
});