gpt4 book ai didi

c# - 从静态类返回 IHttpActionResult 的最佳方法

转载 作者:行者123 更新时间:2023-11-30 18:17:27 27 4
gpt4 key购买 nike

我正在尝试编写一个通用方法以使用我的 Web API 2 返回内部服务器错误...

当我的 Web API 的每个端点发生错误时,我返回一个 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,而我有很多 Controller ),所以我认为用相同的方法创建一个 Helper 可以帮助减少我的代码并使其更清洁和可维护,但是我遇到了问题,当我这样做时 return InternalServerError(new Exception("Custom message to company1, 2, 3"));

我知道返回 InternalServerError 是 ApiController 的一项功能,但拥有该 Helper 真的很有帮助。

感谢您的帮助。

最佳答案

您可以为 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);
}
}
}

然后在 Controller 中:

return this.GetCustomMessage();

关于c# - 从静态类返回 IHttpActionResult 的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43668435/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com