【发布时间】:2019-04-18 14:14:48
【问题描述】:
我正在尝试将我在所有控制器上执行的逻辑移动到一个类中,以遵循“不要重复自己”的原则。我正在苦苦挣扎的是如何优雅地返回错误代码。
以下是我目前在每个控制器中所做的一些示例:
public class SomethingRequest
{
public SomethingModel Something { get; set; }
public string Token { get; set; }
}
public ActionResult GetSomething(SomethingRequest request)
{
var something = request.Something;
var token = request.Token;
if (something == null)
{
return BadRequest("Something object is null. You may have sent data incorrectly");
}
if (token == null || token != "1234")
{
return Unauthorized("Token object is null");
}
}
现在我想做的是将最后两部分移到他们自己的类中:
public class RequestValidation
{
public void TokenCheck(string token)
{
if (token == null || token != "1234")
{
// doesn't work
return Unauthorized("Token object is null");
}
}
public void DataCheck(object someObject)
{
if (someObject == null)
{
// doesn't work
return BadRequest("Object is null. You may have sent data incorrectly");
}
}
}
然后我想像这样从 SomethingController 中调用它们
RequestValidation.TokenCheck(token);
和
RequestValidation.DataCheck(something);
然后让他们返回错误的请求或异常。
我应该如何做到这一点?
【问题讨论】:
-
卡米洛为您提供了答案。就个人而言,这不是我通常会实施的事情。您正在创建复杂性并且仍然编写相同数量的代码。唯一可以提高可读性的方法是不为这些 if 语句使用括号,但是如果您想在 if 中添加其他任何内容,那就有点痛苦了
-
您可以使用authorization filter 执行此操作。这使它与您的控制器代码分开。授权可以改变。您可能希望使用具有不同类型授权的同一控制器。即使是在控制器中进行授权的最佳解决方案也会导致重复的代码和对每个控制器的更改。
标签: c# .net asp.net-core-mvc http-status-codes