【发布时间】:2016-02-21 13:24:37
【问题描述】:
我正在尝试通过以下方式返回状态码
throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.Unauthorized) { ReasonPhrase = "invalid username/password" });
现在 MVC6 不支持此功能,这很糟糕,因为使用 IActionResult 对我来说似乎真的很愚蠢,而且不太直观。 我发现了以下帖子one 和two。 第一个导致链接断开,第二个适用于 MVC 应用程序。
我确实意识到我需要创建一个中间件来解决这个问题,但我不确定从哪里开始,因为这是非常有用的东西,我希望有一些我可以使用的开源解决方案,或者也许一个代码 sn-p。
作为记录,我使用的是 ASP.net 5 rc1 update 1 MVC 6
【问题讨论】:
-
StatusCodeResult 有什么问题? github.com/aspnet/Mvc/blob/dev/src/…
-
据我所知,您必须将操作的返回值设置为 IActionResult,我不希望这样
-
我认为您应该返回正确的
IActionResult(HttpUnauthorizedResult),因为这样可以将控制器的关注点保留在控制器内部,而不是从域的深处抛出异常。您是否希望在抛出异常后请求仍由其他中间件处理?另外,每个控制器都会抛出这个异常吗? -
我不得不说我不同意,在我看来,控制器的职责是管理一个资源,并且该资源应该在控制器中每个方法的标题中看到。当存在无效的工作流程(例如无效的凭据)时,抛出异常并让中间件解决异常更有意义。无论如何,这在 MVC5 中有效,这就是我最困扰的地方。
标签: c# asp.net asp.net-core asp.net-core-mvc