C# 在MVC中抛出未格式化的401
目前我有以下代码:C# 在MVC中抛出未格式化的401,c#,asp.net,asp.net-mvc,C#,Asp.net,Asp.net Mvc,目前我有以下代码: if (!checkAuthCode(LoginAuthenticatieCode)) { throw new HttpException(401, "Auth Failed"); } 此代码检查用户是否经过身份验证,如果没有,则抛出401异常。唯一的问题是,在这个过程中,这个401被打包成一个漂亮的500错误,说 “消息”:“发生错误。”, “例外消息”:“身份验证失败
if (!checkAuthCode(LoginAuthenticatieCode))
{
throw new HttpException(401, "Auth Failed");
}
此代码检查用户是否经过身份验证,如果没有,则抛出401异常。唯一的问题是,在这个过程中,这个401被打包成一个漂亮的500错误,说
“消息”:“发生错误。”,“例外消息”:“身份验证失败”,
“异常类型”:“System.Web.HttpException”,
“StackTrace”:“bij WebApplication1.Controllers.loginController.checkAuthCodeOrThrow(字符串 Blabla中的登录认证代码)
有没有办法防止ASP.NET(或MVC,我不知道这两个版本中的哪一个应该负责)将我的错误包装成这种“很好”的人类可读形式?对于ASP.NET MVC,请使用
HttpException(401,“一些消息…”)
对于ASP.NET WebAPI,使用
HttpResponseException(HttpStatusCode.Unauthorized)
对于ASP.NET MVC,使用HttpException(401,“某些消息…”)
对于ASP.NET WebAPI,请使用
HttpResponseException(HttpStatusCode.Unauthorized)
看起来这是一个WebAPI控制器,您正在引发一个MVC异常。此差异将与MVC 6/vNext统一
目前,MVC和WebAPI使用不同的程序集和名称空间。WebAPI不会将您抛出的System.Web.HttpException
识别为HTTP异常,因此它认为您的应用程序抛出了随机异常,并将其格式化为JSON格式的内部服务器错误
因此,对于WebAPI,抛出一个新的HttpResponseException(HttpStatusCode.Unauthorized)。这将生成一个HTTP 401。看起来这是一个WebAPI控制器,您正在抛出一个MVC异常。这个差异将与MVC 6/vNext统一 目前,MVC和WebAPI使用不同的程序集和名称空间。WebAPI不会将您抛出的
System.Web.HttpException
识别为HTTP异常,因此它认为您的应用程序抛出了随机异常,并将其格式化为JSON格式的内部服务器错误
因此,对于WebAPI,抛出一个
新的HttpResponseException(HttpStatusCode.Unauthorized)
。这将生成一个HTTP 401。@Neel-Yup,我的坏…更正了它,谢谢你指出它。你确定这是MVC而不是WebAPI控制器吗?@Neel-Yup,我的坏…更正了它,谢谢你指出它。你确定这是MVC而不是WebAPI控制器吗?我认为正确的方法是返回一个错误结果,比如?Assuming OP使用的是MVC而不是Web API。我确实是从一个WebAPI控制器发出这个消息的。我对整个MVC和ASP.NET以及所有东西都相当陌生,所以我想我忘了在这里包含一些重要信息。谢谢你的回答,它现在可以按我的要求工作了。@Panagiotis OP使用的是WebAPI。:P我想使用一个类来响应HTTP code有点傻,通常在MVC中使用。虽然如果你使用模型类型的动作方法而不是ActionResult
,你就不能这样做。我认为正确的方法是返回一个错误结果,比如?假设OP使用的是MVC而不是Web API,我确实是从一个WebAPI控制器中抛出这个。我对整个MVC和ASP.NET和所有内容,所以我想我忘了在这里包含一些重要信息。谢谢你的回答,它现在可以按我的要求工作了。@Panagiotis OP正在使用WebAPI。:P我认为在每个HTTP响应代码中使用一个类有点傻,通常在MVC中使用。虽然如果你使用的是模型类型的操作方法而不是<代码,你就不能这样做>操作结果。