繁体   English   中英

ASP.NET Web API有条件地返回HttpResponseMessage

[英]ASP.NET Web API Conditionally return HttpResponseMessage

我有一个ASP.NET Web API,我一直在响应这种格式的请求,

    [HttpPost]
    [Route("")]
    public HttpResponseMessage AlexaSkill()
    {
        HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, "value");
        response.Content = new StringContent("put json here", Encoding.UTF8);
        response.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/json"); 

        return response;
    } 

这一直很有效。 问题是在某些情况下请求者不期望得到响应。 我无法弄清楚如何不对发布到网址的请求者做出回应。 我怎样才能返回上面的响应,并且还可以选择让函数不给出基本上作为void函数的响应?

你应该总是回复一个回复。 当您不想在回复中发送内容时,会显示状态代码204 从规格:

10.2.5 204没有内容

服务器已完成请求但不需要返回实体主体,并且可能希望返回更新的元信息。 响应可以包括实体标题形式的新的或更新的元信息,如果存在,应该与所请求的变体相关联。

如果客户端是用户代理,它不应该从导致请求发送的文档视图中更改它的文档视图。 此响应主要用于允许在不导致更改用户代理的活动文档视图的情况下进行操作的输入,尽管任何新的或更新的元信息应该应用于当前在用户代理的活动视图中的文档。

204响应绝不能包含消息体,因此总是在头字段之后的第一个空行终止。

所以你的代码可能是这样的:

[HttpPost]
public HttpResponseMessage SomeMethod()
{
    // Do things
    return Request.CreateResponse(HttpStatusCode.NoContent);
} 

即使是void方法也会将HTTP状态代码返回给调用API的客户端。 看到这个链接

您可能需要向客户要求更改或其他替代方案。

如果您只想终止请求,请尝试以下操作:

HttpContext.Current.Response.End();
throw new Exception("Terminating request.");

对于HTTP服务器来说,这似乎是一件奇怪的事情,但如果那是你真正需要的,那么就给它一个机会。 如果您遵循抛出异常,则不会将错误发送到客户端,因为您已经结束了响应。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM