我试图编写一个通用方法来使用我的Web API 2返回内部服务器错误...
当我的Web API的每个端点发生错误时,我返回InternalServerError(new Exception("This is a custom message"))
。我有几个站点使用相同的后端和不同的URL,每个站点都有基于请求URI(company1.com,company2.com,company3.com)的自己的异常消息,所以我创建了一个通用方法:< / p>
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"));
我知道返回的InternalServerError是ApiController的一个功能,但拥有该Helper会非常有帮助。
感谢您的帮助。
答案 0 :(得分:0)
您可以为ApiController类创建一个新的扩展方法:
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();