【问题标题】:httpclient postasync windows phone 8.1 universal app second call 404 errorhttpclient postasync windows phone 8.1通用应用第二次调用404错误
【发布时间】:2015-06-19 09:37:42
【问题描述】:

我在通用 Windows Phone 8.1 应用程序中遇到了 httpclient 问题。 我一直在寻找,但我在任何帖子中都没有有效的解决方案。

问题是,当我第一次调用 Web 服务时运行正常,但是当我第二次或第三次调用它时,给我一个错误 404。

在您重新启动之前,应用程序不会再次运行。

我需要在 post 函数中发送该数据,因为我想发送一个格式化为字符串的 xml。

我的代码很简单:

var handler = new HttpClientHandler
        {
            Credentials = new
                NetworkCredential("user", "pass", "domain")
        };


        using (var client = new HttpClient(handler))
        {
            var formContent = new FormUrlEncodedContent(new[]
                    {
                        new KeyValuePair<string, string>("XMLText", XMLText),
                        new KeyValuePair<string, string>("param1", "textParam1")
                    });

            HttpResponseMessage response = new HttpResponseMessage();
            response = await client.PostAsync(URL, formContent);
            var responseString = response.Content.ReadAsStringAsync().Result;
            MessageDialog msgbox = new MessageDialog(responseString);
            await msgbox.ShowAsync();
        }

而且我的网络服务更简单:

[WebMethod]
    public String SetEnvioXML(string XMLText, string param1)
    {
        return XMLText;
    }

有什么办法吗?

对不起我的英语,谢谢大家!

欢迎任何帮助!

【问题讨论】:

  • 提琴手痕迹会有所帮助。
  • 大家好,感谢您的帮助。我继续解决这个问题,但我有一个新因素。我试图删除我的 Web 服务 (IIS) 的 Windows 身份验证,它的规则正常。 httpclient是否有可能丢失了凭据?这很奇怪,因为第一次通话运行正常,第二次通话遵循相同的路径......知道吗?谢谢

标签: http post windows-phone-8.1 httpclient universal


【解决方案1】:

尝试使用下面的代码可能会奏效, 首先尝试在 Google Rest Client 或 Post Man 上运行它

            HttpRequestMessage httpRequest = new HttpRequestMessage();
            httpRequest.Method = HttpMethod.Post;
            httpRequest.RequestUri = URL;
            httpRequest.Content = formContent ;

            response  =await client.SendAsync(httpRequest);

【讨论】:

  • 感谢您的快速回答,但我对其进行了调查并收到了同样的错误。我不知道发生了什么。
  • 你遇到了什么异常
  • 在第二次调用中,“response”接收下一个:{StatusCode: 404, ReasonPhrase: 'Not Found', Version: 1.1, Content: System.Net.Http.StreamContent, Headers: { Content -长度:0 }}
  • 是的。我检查休息客户端。如果我在谷歌浏览器中进行探测,我可以无限次访问。非常感谢您的帮助
【解决方案2】:

最后我找到了解决方案,我将身份验证从 Windows 身份验证更改为 IIS 中的基本身份验证,并在其中设置域。然后我试试:

client = new HttpClient();
var authHeader = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(Encoding.UTF8.GetBytes(string.Format("{0}:{1}", "usuario", "contraseña")))); client.DefaultRequestHeaders.Authorization = authHeader;

它规则。感谢您的所有回答!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-25
    • 2014-08-11
    相关资源
    最近更新 更多