从静态 class 到 Return IHttpActionResult 的最佳方法
Best way to Return IHttpActionResult from static class
我正在尝试编写一个通用方法来解决 return 我的 Web API 2...
的内部服务器错误
当我的 Web API 的每个端点都发生错误时,我 return 一个 InternalServerError(new Exception("This is a custom message"))
。我有几个站点使用相同的后端和不同的 URL,每个站点都有自己的基于请求 URI 的异常消息(company1.com、company2.com、company3.com),所以我创建了一个通用方法:
private IHttpActionResult getCustomMessage() {
if(Request.RequestUri.Host.Contains("company1")) {
return InternalServerError(new Exception("Custom message for company1"));
}
if(Request.RequestUri.Host.Contains("company2")) {
return InternalServerError(new Exception("Custom message for company2"));
}
if(Request.RequestUri.Host.Contains("company3")) {
return InternalServerError(new Exception("Custom message for company3"));
}
}
但是用相同的代码维护很多这样的方法有点困难(一个由 Controller,我有很多控制器),所以我认为用相同的方法创建一个 Helper 可以帮助减少我的代码并使其更清晰和可维护,但是当我这样做时我遇到了问题 return InternalServerError(new Exception("Custom message to company1, 2, 3"));
我知道 returning InternalServerError 是 ApiController 的一项功能,但拥有该 Helper 真的很有帮助。
感谢您的帮助。
您可以为 ApiController 创建一个新的扩展方法 class:
public static class MyApiControllerExtensions
{
public IHttpActionResult GetCustomMessage(this ApiController ctrl)
{
// this won't work because the method is protected
// return ctrl.InternalServerError();
// so the workaround is return whatever the InternalServerError returns
if (Request.RequestUri.Host.Contains("company1"))
{
return new System.Web.Http.Results.ExceptionResult(new Exception("Custom message for company1"), ctrl);
}
if (Request.RequestUri.Host.Contains("company2"))
{
return new System.Web.Http.Results.ExceptionResult(new Exception("Custom message for company2"), ctrl);
}
if (Request.RequestUri.Host.Contains("company3"))
{
return new System.Web.Http.Results.ExceptionResult(new Exception("Custom message for company3"), ctrl);
}
}
}
然后在控制器中:
return this.GetCustomMessage();
我正在尝试编写一个通用方法来解决 return 我的 Web API 2...
的内部服务器错误当我的 Web API 的每个端点都发生错误时,我 return 一个 InternalServerError(new Exception("This is a custom message"))
。我有几个站点使用相同的后端和不同的 URL,每个站点都有自己的基于请求 URI 的异常消息(company1.com、company2.com、company3.com),所以我创建了一个通用方法:
private IHttpActionResult getCustomMessage() {
if(Request.RequestUri.Host.Contains("company1")) {
return InternalServerError(new Exception("Custom message for company1"));
}
if(Request.RequestUri.Host.Contains("company2")) {
return InternalServerError(new Exception("Custom message for company2"));
}
if(Request.RequestUri.Host.Contains("company3")) {
return InternalServerError(new Exception("Custom message for company3"));
}
}
但是用相同的代码维护很多这样的方法有点困难(一个由 Controller,我有很多控制器),所以我认为用相同的方法创建一个 Helper 可以帮助减少我的代码并使其更清晰和可维护,但是当我这样做时我遇到了问题 return InternalServerError(new Exception("Custom message to company1, 2, 3"));
我知道 returning InternalServerError 是 ApiController 的一项功能,但拥有该 Helper 真的很有帮助。
感谢您的帮助。
您可以为 ApiController 创建一个新的扩展方法 class:
public static class MyApiControllerExtensions
{
public IHttpActionResult GetCustomMessage(this ApiController ctrl)
{
// this won't work because the method is protected
// return ctrl.InternalServerError();
// so the workaround is return whatever the InternalServerError returns
if (Request.RequestUri.Host.Contains("company1"))
{
return new System.Web.Http.Results.ExceptionResult(new Exception("Custom message for company1"), ctrl);
}
if (Request.RequestUri.Host.Contains("company2"))
{
return new System.Web.Http.Results.ExceptionResult(new Exception("Custom message for company2"), ctrl);
}
if (Request.RequestUri.Host.Contains("company3"))
{
return new System.Web.Http.Results.ExceptionResult(new Exception("Custom message for company3"), ctrl);
}
}
}
然后在控制器中:
return this.GetCustomMessage();