在我的WebAPI类中,ApiController
,我进行了如下调用:
string myCustomMessage = .....;
throw new HttpResponseException(
new HttpResponseMessage(HttpStatusCode.Unauthorized)
{ ReasonPhrase = myCustomMessage });
当我使用AngularJS $resource
服务调用时,我在promise的catch块的status字段中得到401响应。401匹配< code>HttpStatusCode。未授权,所以一切正常。
然而,问题是响应的数据字段是空的(null)。我没有得到返回的myCustomMessage。
现在,如果不是抛出一个< code > httpresponseeexception 异常,而是抛出一个带有消息的常规< code >异常,该消息确实会使它返回Angular。
我需要能够做到这两点:从服务器返回自定义消息,以及返回的状态代码是我想要的任何东西,在本例中为401。
有人知道如何做到这一点吗?
[编辑]解决方案:
throw new HttpResponseException(
Request.CreateErrorResponse(HttpStatusCode.Unauthorized, myCustomMessage));
为此,我使用了一个响应拦截器。响应拦截器相当于一个“过滤器”,所有的响应都通过它,我可以询问它的状态代码并执行逻辑。
大概是这样的:
myModule.factory('responseInterceptor', function ($q) {
return {
response: function (res) {
switch(res.status){
case 401:
// do what you want
}
return res;
},
responseError: function (res) {
return $q.reject(res);
}
};
});
myModule.config(function ($httpProvider) {
$httpProvider.interceptors.push('responseInterceptor');
});
关于您的自定义消息,您可以将其添加到 http 标头中。在我的情况下,当我得到一个401时,我会添加一个带有URL的位置标题并重定向到它。
尝试返回<code>HttpResponseMessage<code>如下。
public HttpResponseMessage Get()
{
return Request.CreateErrorResponse(
HttpStatusCode.Unauthorized, "You are not authorized");
}
这应该会产生如下的HTTP响应消息。
HTTP/1.1 401 Unauthorized
Content-Type: application/json; charset=utf-8
Server: Microsoft-IIS/8.0
Date: Sat, 12 Apr 2014 07:12:54 GMT
Content-Length: 36
{"Message":"You are not authorized"}
问题内容: 在我的WebAPI类中,我进行了如下调用: 当我使用AngularJS 服务进行调用时,我确实在status字段的promise的catch块中得到401响应。401匹配,所以一切顺利。 但是,问题在于响应的数据字段为空(空)。我没有得到myCustomMessage返回。 现在,如果我没有抛出异常,而只是抛出一条带有消息的常规消息,那么该消息确实会使它向Angular倾斜。 我需要能
我正在处理WebAPI 2中的一个服务,endpoint当前返回一个<code>IHttpActionResult<code>。我想返回一个状态代码,但由于它不在枚举中,我不知道如何发送它,因为所有构造函数都需要一个参数 目前,我正在返回<code>BadResult(消息),但返回<code>422
在Spring Boot控制器中,我使用检查用户是否登录(使用基本auth+)。 但是如果用户没有登录,即他们没有经过身份验证,控制器返回。 根据我对身份验证与授权的了解,用于身份验证,而用于授权。 根据我的理解,总是检查用户的授权(顾名思义),但是有什么方法可以根据我们传递给它的参数自定义它,即? 我知道还有另一种解决方案:在中使用基于URL的安全配置,但如果我不想这样做,该怎么办。 有什么想法
我第一次尝试在request angular js中添加customer头,但遇到以下错误 Angular.js:10671错误:在“XMLHttpRequest”上执行“set requestheader”失败:“x-api-key:”不是有效的HTTP标头字段名。 下面是我的代码,在最高的“应用程序”级别: 我做错了什么/错过了什么/不明白什么?我如何将这个头添加到所有(甚至一个)请求中?
我正在尝试使用Angular Material版本7和Angular 6制作一个自定义MatFormFieldControl。自定义输入是一个重量输入,它有一个值(输入类型=“数字”)和一个单位(选择“kg”、“g”、…)。它必须放在mat form字段控件中,使用反应式表单(formControlName=“weight”)并支持错误状态(
像“addSomething()”这样的类也有方法。这个可以成功也可以不成功。因此,成功的状态可以用一个布尔返回值来显示。但是有时方法调用会因为几个原因而失败。“false”显示了这一点,但只是以一般方式显示。有时程序员想知道失败的原因。为此,提供一个自己的报告类来提供这样的功能有用吗? 然后,您可以决定是否要使用“wassucsuccess()”获取一般成功报告,或者是否还要使用“getMess