【问题标题】:Set the response message content but I can't retrieve it设置响应消息内容,但我无法检索它
【发布时间】:2014-05-06 02:58:53
【问题描述】:

我有一个服务器方法,它接受并编码字符串列表,因为 IE9 不读取 json 格式,我想要的是在 http 响应消息的内容中设置字符串。我似乎做得很好,但是当我得到响应时,我可以在正文上找到响应,我只能看到我在响应消息中设置的长度。

代码如下:

public HttpResponseMessage Upload()
    {
        HttpResponseMessage m = new HttpResponseMessage(HttpStatusCode.OK);
        List<string> returnlist = new List<string>();
        for (int i = 0; i < Request.Files.Count; i++)
        {
                   //string treatment        
        }

        HttpResponseMessage response = new HttpResponseMessage();

        response.Content = new StringContent(string.Join(",", returnlist));
        return response;
    }

这就是字符串包含的内容“file1,file2,file3” 但我在visual studio或firebug中找不到它调试

我得到的回应是:

StatusCode: 200, ReasonPhrase: 'OK', Version: 1.1, Content: System.Net.Http.StringContent, Headers:

{
  Content-Type: text/plain; charset=utf-8
}

如何设置并获取响应消息?

如果需要这里的js是它:

self.uploadfiles = function () {
        //startSpinner();

        if (!self.isOldIE()) {
            var loc = window.location;
            base_url = loc.protocol + "//" + loc.host;
            baseUrl = base_url + "/";

            var save = true;

            var xhr = new XMLHttpRequest();
            xhr.open('POST', baseUrl + 'Home/Upload');
            xhr.send(formdata);
            xhr.onreadystatechange = function (data) {
                //The responseText is the same as above
                if (xhr.responseText.length > 0) {  

                   //do stuff
      }
    };

【问题讨论】:

  • 状态说明了一切...错误 404:您请求的页面不存在...您在上面显示的代码可能永远不会命中...
  • 那是因为我像 json 一样处理 js ajax 中的响应,所以我编辑了问题。

标签: c# .net web-services http asp.net-web-api


【解决方案1】:

试试这个代码

        var response = Request.CreateResponse(HttpStatusCode.OK, string.Join(",", returnlist));
        return response;

【讨论】:

    【解决方案2】:

    尝试使用 Javascript 获取响应:

    var xhr = new XMLHttpRequest();
    
    xhr.open('POST', baseUrl + 'Home/Upload', true);
    xhr.onreadystatechange = function() {
    
        if (xhr.readyState === 4 && xhr.status === 200)  { 
            alert(xhr.responseText);
        } else {
            // do something about the error
        }
    };
    xhr.send(formdata);
    

    注意用于异步获取的open()方法的第三个布尔参数。

    【讨论】:

    • 我假设您在 ApiController 中工作,但听起来可能并非如此。保留您的原始代码并尝试新的答案以获得响应。
    • 我使用的是Controller类,但我需要的是创建一个响应(不是在ie9中使用的json),并使用js从客户端检索它。客户端已解析,但我在响应中没有看到我发送的 http 消息中的字符串。
    • 你也可以粘贴你的javascript吗?
    【解决方案3】:

    由于某种原因,浏览器不会显示整个 http 响应正文。所以我的解决方案是写响应的header,从js中获取header。 也许有人知道为什么浏览器不显示正文,或者有更好的解决方案。

    这是我的控制器:

    public HttpResponseMessage Upload()
        {
            HttpResponseMessage m = new HttpResponseMessage(HttpStatusCode.OK);
            List<string> returnlist = new List<string>();
    
    
            for (int i = 0; i < Request.Files.Count; i++)
            {
                HttpPostedFileBase file = Request.Files[i]; //Uploaded file
                //Use the following properties to get file's name, size and MIMEType
                int fileSize = file.ContentLength;
    
                if (file.FileName != "")
                {
                    string fileName = string.Format("{0}.{1}", Guid.NewGuid().ToString(), file.FileName.ToString().Split('.')[1].ToString());
                    returnlist.Add(fileName);
    
                }
    
            }
    
    
    //Here I write the response message headers
            HttpResponseMessage response = new HttpResponseMessage();
    
            response.Content = new StringContent(string.Join(",", returnlist), Encoding.UTF8, "text/html");
    
            response.Headers.Add("data", string.Join(",", returnlist));
    
            return response;
        }
    

    这是我获得标头响应的方式:

    var xhr = new XMLHttpRequest();
                xhr.open('POST', baseUrl + 'Home/Upload');
                xhr.send(formdata);
                xhr.onreadystatechange = function (data) {
                    if (xhr.responseText.length > 0) {
    //header response
                        var response = xhr.responseText;
                     }
    

    【讨论】:

      猜你喜欢
      • 2019-03-03
      • 2023-04-04
      • 2018-01-03
      • 1970-01-01
      • 1970-01-01
      • 2015-09-23
      • 2019-10-29
      • 2020-05-10
      • 2013-08-06
      相关资源
      最近更新 更多