gpt4 book ai didi

c# - HTTP 失败响应覆盖非本地客户端的响应主体

转载 作者:太空狗 更新时间:2023-10-29 18:19:11 24 4
gpt4 key购买 nike

我正在为一些公共(public)页面创建一个锁定机制,该机制应该只允许一个用户同时编辑它们。客户端对服务器进行 GET API 调用以请求锁定,这会返回一个 MVC ActionResult 对象。出于某种原因,当我在本地运行程序并返回 new HttpConflictResult("Cannot acquire lock", message); (表示获取锁失败)时,它工作正常。错误消息被正确发送和接收,并且可以显示在警报或任何需要的地方。但是,当我远程访问站点时,消息被“由于存在冲突而未显示该页面”覆盖。我是在做错什么还是这是 IIS 的“功能”之类的?如果是,是否有办法绕过它,以便我仍然可以向客户发送我想要的消息?

在此先感谢您的帮助!

编辑:抱歉,忘记了 HttpConflictResult 是一个继承类。这里有一些关于它的信息:

public class HttpConflictResult : HttpErrorResult
{
public HttpConflictResult() : this(string.Empty) { }
public HttpConflictResult(string errorMessageResource) : this("Conflict", errorMessageResource, true) { }
public HttpConflictResult(string statusMessage, string errorMessage) :
base(409, statusMessage, errorMessage) { }
}

public class HttpErrorResult : ActionResult
{
protected int _statusCode;
protected string _statusMessage;
protected string _errorMessage;

public HttpErrorResult(int statusCode, string statusMessage, string errorMessageResource)
{
_statusCode = statusCode;
_statusMessage = statusMessage;
_errorMessage = errorMessage;
}

public override void ExecuteResult(ControllerContext context)
{
context.HttpContext.Response.StatusCode = _statusCode;
context.HttpContext.Response.StatusDescription = _statusMessage;
if(_errorMessage != null)
{
context.HttpContext.Response.ContentType = "application/json; charset=utf-8";
context.HttpContext.Response.Clear();

System.Web.Script.Serialization.JavaScriptSerializer ser = new System.Web.Script.Serialization.JavaScriptSerializer();
context.HttpContext.Response.Write(ser.Serialize(new { message = _errorMessage }));
}
}
}

如果我遗漏了任何其他内容,请告诉我。再次感谢!

最佳答案

如果您正在设置错误代码(即 4xx 或 5xx 范围内的 http 状态代码),并且您在 IIS 7 下运行,那么您需要确保您已告知 IIS 不要使用标准错误消息。

您使用 TrySkipIisCustomErrors 执行此操作Response 对象上的参数。尝试按如下方式修改 HttpErrorResult:

public override void ExecuteResult(ControllerContext context)
{
// Set TrySkipIisCustomErrors to ensure ASP.NET sends your error content to the
// user instead of the default ASP.NET content under IIS 7.
context.HttpContext.Response.TrySkipIisCustomErrors = true;

context.HttpContext.Response.StatusCode = _statusCode;
context.HttpContext.Response.StatusDescription = _statusMessage;

if(_errorMessage != null)
{
[...]
}
}

关于c# - HTTP 失败响应覆盖非本地客户端的响应主体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6075904/

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