首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ASP.NET MVC Web Api仅在1个Http方法中可用,但如果它有其他方法,则不会抛出Http Statuscode406

ASP.NET MVC Web Api仅在1个Http方法中可用,但如果它有其他方法,则不会抛出Http Statuscode406
EN

Stack Overflow用户
提问于 2016-07-17 00:15:56
回答 1查看 159关注 0票数 0

所以,我的主要问题在标题中。一旦提供了无效的方法,如何避免浏览器抛出Http Statuscode 406?

默认情况下,我尝试使用[AcceptVerbs("GET", "POST", "PUT", "DELETE")]允许所有传入的方法,然后使用此方法过滤出实际允许的方法:

代码语言:javascript
运行
复制
private bool CheckAllowedMethod(HttpMethod allowed, HttpMethod given)
{
    if (allowed == given)
    {
        return true;
    }

    throw new InvalidMethodException("This method is not available over " + Request.Method.Method);
}

即使这样可以工作,它也不是很整洁。在使用[HttpPost]时,我想要避免的行为是,浏览器抛出一个Http Statuscode406,即使我想一直显示一个JSON字符串,也不会打印任何内容到站点。

那么,这是否可能变得更简单,或者我必须使用我当前的方法?

完整代码:

代码语言:javascript
运行
复制
[AcceptVerbs("GET", "POST", "PUT", "DELETE")]
[Route("api/Auth/Login/{apikey}")]
public HttpResponseMessage GenerateLoginCode(string apikey = "") {
 HttpResponseMessage response = CreateResponse();

 try {
  CheckAllowedMethod(HttpMethod.Post, Request.Method);

  ChangeContent(response, JSONString.Create(Apikey.Login(apikey)));
 } catch (Exception ex) {
  ChangeContent(response, Error.Create(ex));
 }

 return response;
}

private HttpResponseMessage CreateResponse() {
 return Request.CreateResponse(HttpStatusCode.OK);
}

private void ChangeContent(HttpResponseMessage res, string data) {
 res.Content = new StringContent(data, System.Text.Encoding.UTF8, "application/json");
}

private bool CheckAllowedMethod(HttpMethod allowed, HttpMethod given) {
 if (allowed == given) {
  return true;
 }

 throw new InvalidMethodException("This method is not available over " + Request.Method.Method);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-17 00:24:09

我不会通过接受所有方法和手动过滤来做到这一点,而是使用一个捕获错误响应并重写它的中间件。

我深入研究了WebAPI2 earlier this year中的错误处理,并在this blog post中扩展了我的发现。如果您执行类似的操作,则可以在中间件中的一个特殊catch子句中处理来自disallowed方法的异常,并向响应中写入任何您想要的内容。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38413061

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档