【发布时间】:2016-06-06 23:39:24
【问题描述】:
我的操作方法设置为只接受 GET 请求。如果向其发送除 GET 之外的动词,则会将“HTTP 405 Method not allowed”响应发送回客户端。但是每当向它发送除 GET 之外的动词时,我都需要记录它。我目前正在尝试的方式是尝试引发异常(我不知道要捕获哪个异常),然后在 catch 块内进行日志记录。我的操作方法如下:
[RoutePrefix("api/Resource")]
public class MyController : ApiController
{
.
.
.
[Route("MyRoute")]
[ResponseType(typeof(IEnumerable<MyResource>))]
[HttpGet]
public async Task<IHttpActionResult> GetMyResourceAsync()
{
try
{
.
.
.
}
catch (WhichException e) // which exception do I catch here if a verb other than GET is sent by a client?
{
MyLogger.Log("Invalid http verb!");
}
}
.
.
.
}
当我尝试使用 postman 访问资源并指定诸如 POST 或 PUT 之类的动词时,我收到 HTTP 405 响应,但我不确定在我的操作方法中捕获哪个异常以拦截非 GET 请求.不一定是通过引发异常,但任何其他记录非 GET 请求的方式也可以。
【问题讨论】:
-
你不需要捕获异常。如果使用了另一个动词,您的 GET 服务将不会执行。
-
我知道它不会被执行,但我需要记录来自客户端的所有非 GET 请求。我该怎么做?
-
Bruno.P 是正确的。我已经添加了一个记录请求的答案......如果你的“规则”不是 Http.Get 请求......过滤起来很简单。