gpt4 book ai didi

c# - ASP.NET MVC5 删除 API 错误的 html 响应

转载 作者:行者123 更新时间:2023-11-30 12:42:47 25 4
gpt4 key购买 nike

我想知道如何更好地解决这个问题。

该应用已注册 mvc web 和 web api。我有一个单独的 mvc 网络 Controller (称为 Error)负责呈现错误页面。我的 web.config 看起来像:

<system.webServer>  
<httpErrors errorMode="Custom" existingResponse="Replace">
<remove statusCode="404" />
<remove statusCode="500" />
<error statusCode="404" responseMode="ExecuteURL" path="/error/404" />
<error statusCode="500" responseMode="ExecuteURL" path="/error/500/" />
</httpErrors>
</system.webServer>

它适用于 mvc 网页,但现在适用于 web api,当我返回 NotFound() 时,我得到 html 错误页面作为返回。我想通过使用位置属性来解决这个问题:

<location path="api">
<system.webServer>
<httpErrors errorMode="Custom" existingResponse="Replace">
<remove statusCode="404" />
<remove statusCode="500" />
</httpErrors>
</system.webServer>
</location>

因此,现在它不返回 html,而只是来自 asp.net 的错误字符串。

但是如果我需要从 web api 返回一些对象并且只是在操作中设置错误 header 或者只是没有数据的错误 header 怎么办?

谢谢

最佳答案

我不确定这是否正是您要尝试执行的操作,但如果您只想发送错误对象 (json),则可以试试这个。这当然不是最好的出路!

想法是将静态对象保存为文件中的文本,并在出错时提供文件内容。

web.config 中为路径 api 设置自定义错误

<httpErrors errorMode="Custom" existingResponse="Replace">
<remove statusCode="404" />
<remove statusCode="500" />
<error statusCode="404" responseMode="File" path="templates\404.json" />
<error statusCode="500" responseMode="File" path="templates\500.json" />
</httpErrors>

然后,在路径 \templates 中添加文件 500.json 和内容

{
"Code": 500,
"Message": "Something went wrong, please try again later"
}

现在出现内部服务器错误(http 状态代码 500),由服务器返回

500 Error in API

注意:检查目录权限,并执行iisreset


选项 2 - 异常过滤器

创建一个自定义 API 异常过滤器属性,该属性在异常时返回一个 json。该消息可以根据 Controller / Action /全局进行定制。

public class ApiExceptionAttribute : ExceptionFilterAttribute 
{
string _message = null;

public ApiExceptionAttribute(string exceptionMessage = null) //to add custom message
{
_message = exceptionMessage;
}

public override void OnException(HttpActionExecutedContext context)
{
var message = new {
ExceptionType = "Custom", //or some other detail
Message = _message == null ? "Something went wrong, please try later" : _message
};
context.Response = context.Request.CreateResponse(HttpStatusCode.SeeOther, message, "application/json");
}
}

并在 API Controller 中使用它(可选地使用自定义消息)

[ApiExceptionAttribute("This end point is to test error!")]
public class TestController : ApiController
{
public IEnumerable<string> Get()
{
//actual code here
throw new Exception("Back-end exception");
}
}

关于c# - ASP.NET MVC5 删除 API 错误的 html 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32637199/

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