首页 新闻 会员 周边 捐助

asp.net MVC 中httpstatuscoderesult 返回中文

0
悬赏园豆:50 [待解决问题]

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);  

  }

})

settan的主页 settan | 初学一级 | 园豆:154
提问于:2014-03-18 15:09
< >
分享
所有回答(4)
0

自己翻下 ttpstatuscoderesult 的源码吧。

Launcher | 园豆:45050 (高人七级) | 2014-03-18 15:18

源码我还没看明白,只知道httpstatuscoderesult有两个成员StatusCodeStatusDescription,难道 httpstatuscoderesult不支持中文吗?

支持(0) 反对(0) settan | 园豆:154 (初学一级) | 2014-03-18 16:14

@settan: 不知道啊!让你看下源码,它是怎么处理 statusDescription 参数的。你也可以抓包看下,到底是服务器没返回中文,还是客户端无法解析中文。

支持(0) 反对(0) Launcher | 园豆:45050 (高人七级) | 2014-03-18 16:24

@Launcher: 抓包显示服务器返回的就是乱码

支持(0) 反对(0) settan | 园豆:154 (初学一级) | 2014-03-18 19:14

@settan: 你把 httpstatuscoderesult 的源码贴出来。

支持(0) 反对(0) Launcher | 园豆:45050 (高人七级) | 2014-03-19 09:14

@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;
      }
    }
  }
}

支持(0) 反对(0) settan | 园豆:154 (初学一级) | 2014-03-25 21:23

@settan: 你用简单的 asp.net ,直接用 context.HttpContext.Response.StatusDescription 来赋值,你看看客户端能收到你修改的文字不。

根据 http 协议,StatusDescription 是写在 http header 中的,而 http header 通常不包含非英文和数字字符。

支持(0) 反对(0) Launcher | 园豆:45050 (高人七级) | 2014-03-26 09:30
0

$.ajax中的contentType与dataType设置的是什么?

dudu | 园豆:30948 (高人七级) | 2014-03-18 15:27

contentType 我没有设置,用的是默认值。

支持(0) 反对(0) settan | 园豆:154 (初学一级) | 2014-03-18 16:12
0

这个对于你实际业务逻辑不重要吧

[秦时明月] | 园豆:738 (小虾三级) | 2014-03-19 09:24
0

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获取

游游鱼 | 园豆:202 (菜鸟二级) | 2017-09-28 14:50
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册