action 返回new httpstatuscoderesult, StatusDescription 不能是中文吗?
//测试action
ActionResult Test()
{
return new httpstatuscoderesult(500,"服务器错误");
}
$.ajax({
"url":..,
error: fuction(rsp,coder,statusText){
//这里收到的statusText始终是"error",并不是“服务器错误”
//但如果action中返回的不是中文,return new httpstatuscoderesult(500,"server error");则可以收到statusText = “server error”.
alert(statusText);
}
})
自己翻下 ttpstatuscoderesult 的源码吧。
源码我还没看明白,只知道httpstatuscoderesult有两个成员StatusCode和StatusDescription,难道 httpstatuscoderesult不支持中文吗?
@settan: 不知道啊!让你看下源码,它是怎么处理 statusDescription 参数的。你也可以抓包看下,到底是服务器没返回中文,还是客户端无法解析中文。
@Launcher: 抓包显示服务器返回的就是乱码
@settan: 你把 httpstatuscoderesult 的源码贴出来。
@Launcher:
namespace System.Web.Mvc
{
public class HttpStatusCodeResult : ActionResult {
public HttpStatusCodeResult(int statusCode)
: this(statusCode, null) {
}
public HttpStatusCodeResult(int statusCode, string statusDescription) {
StatusCode = statusCode;
StatusDescription = statusDescription;
}
public int StatusCode {
get;
private set;
}
public string StatusDescription {
get;
private set;
}
public override void ExecuteResult(ControllerContext context) {
if (context == null) {
throw new ArgumentNullException("context");
}
context.HttpContext.Response.StatusCode = StatusCode;
if (StatusDescription != null) {
context.HttpContext.Response.StatusDescription = StatusDescription;
}
}
}
}
@settan: 你用简单的 asp.net ,直接用 context.HttpContext.Response.StatusDescription 来赋值,你看看客户端能收到你修改的文字不。
根据 http 协议,StatusDescription 是写在 http header 中的,而 http header 通常不包含非英文和数字字符。
$.ajax中的contentType与dataType设置的是什么?
contentType 我没有设置,用的是默认值。
这个对于你实际业务逻辑不重要吧
HTTP头其实就是ACSII码,准确的来说HTTP头里面不会出现标准ACSII之外的字符。URL里的中文一般都是用UTF-8编码,然后写成%XX
的形式。所以HTTP里面不会出现标准ACSII之外的字符,所以HTTP头用ACSII编码就够了。这样就可以正确解析 HTTP头了。
HTTP状态代码描述 可以是中文 需要HttpUtility.UrlEncode url编码,并且不能超过512个字符
如下:
var statusDescription = HttpUtility.UrlEncode("服务器发生错误");
filterContext.Result = new HttpStatusCodeResult(HttpStatusCode.InternalServerError, statusDescription);
建议您把错误消息写入到http body里(像webapi一样,错误信息都是写入到body中 ) 然后ajax中通过XMLHttpRequest对象responseText获取