【发布时间】:2014-10-24 08:54:38
【问题描述】:
我有一个简单的控制器:
public class UsersController : ApiController
{
[HttpPost]
[AllowAnonymous]
public HttpResponseMessage Login([FromBody] UserLogin userLogin)
{
var userId = UserCleaner.Login(userLogin.MasterEntity, userLogin.UserName, userLogin.Password, userLogin.Ua);
if (userId == null) return Request.CreateErrorResponse(HttpStatusCode.Unauthorized, "User not authorized");
return Request.CreateResponse(HttpStatusCode.OK, Functions.RequestSet(userId));
}
}
如您所见,目前只有 POST 可用。
但是当我在浏览器中调用 GET 时(仅用于检查):
我明白了:
{"Message":"请求的资源不支持http方式 '得到'。"}
我很清楚为什么会这样。但我想在它发生时返回一个自定义异常。
SO 的其他答案并没有显示我如何处理这种情况(反正我没有找到)
问题
我应该如何(以及在哪里)捕捉到这种情况并返回自定义异常(HttpResponseMessage)?
注意
我不想只为“catch and throw”添加一个虚拟的 GET 方法。 明天可以有一个 GET 方法。我只想抓住这个异常并返回我的 OWN!
【问题讨论】:
-
你想抛出一个异常是你的生产代码,还是仅仅断言测试中的路由?
-
@SrikanthVenugopalan 我想捕捉这种情况并返回 http 异常。 (错误响应)。是的,在生产中。 另外 - 路由阶段还为时过早,无法知道某个操作是否存在。
-
嗯,有那么一刻我很想给你指出我用来声明路由的WebApiContrib.Testing。
标签: c# asp.net-web-api