我正在为一些公共页面创建一个锁定机制,它应该只允许一个用户同时编辑它们.客户端向服务器发出GET API调用请求锁定,该锁定返回MVC ActionResult对象.出于某种原因,当我在本地运行程序并返回a 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 }));
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果我遗漏了其他任何东西,请告诉我.再次感谢!
Zha*_*uid 14
如果您正在设置错误代码(即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)
{
[...]
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3189 次 |
| 最近记录: |