Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# cookie不工作的重定向WebRequest(Windows Build 15063)_C#_Uwp_Windows 10 Mobile - Fatal编程技术网

C# cookie不工作的重定向WebRequest(Windows Build 15063)

C# cookie不工作的重定向WebRequest(Windows Build 15063),c#,uwp,windows-10-mobile,C#,Uwp,Windows 10 Mobile,我创建了一个UWP应用程序,它通过重定向和cookie调用Webservice wich响应 这适用于Windows 10版本1803(内部版本17134) 当切换到Windows 10 Creators Update(Build 15063)以便在Windows 10 Mobile上运行时,它停止工作(在PC和Mobile上) 使用fiddler可以看到,当请求被重定向时,cookie没有被使用 public static async System.Threading.Tasks.Task&l

我创建了一个UWP应用程序,它通过重定向和cookie调用Webservice wich响应

这适用于Windows 10版本1803(内部版本17134)
当切换到Windows 10 Creators Update(Build 15063)以便在Windows 10 Mobile上运行时,它停止工作(在PC和Mobile上)

使用fiddler可以看到,当请求被重定向时,cookie没有被使用

public static async System.Threading.Tasks.Task<double> GetCreditAsync(string number, string pun, System.Threading.CancellationToken cancel = default(System.Threading.CancellationToken))
{
    var cookieContainer = new CookieContainer();

    var request = System.Net.WebRequest.Create("http://test.test") as HttpWebRequest;
    using (cancel.Register(() => request.Abort(), useSynchronizationContext: false))
    {
        request.Method = "POST";
        request.CookieContainer = cookieContainer;

        request.ContentType = "multipart/form-data; boundary=---------------------------7e23ca1f27119e";
        var data = "-----------------------------7e23ca1f27119e"
        + "\n" + "Content-Disposition: form-data; name=\"data1\""
        + "\n" + ""
        + "\n" + number
        + "\n" + "-----------------------------7e23ca1f27119e"
        + "\n" + "Content-Disposition: form-data; name=\"data2\""
        + "\n" + ""
        + "\n" + pun
        + "\n" + "-----------------------------7e23ca1f27119e--"
        + "\n" + "";
        var buffer = System.Text.Encoding.UTF8.GetBytes(data);
        using (var requeststream = await request.GetRequestStreamAsync())
            requeststream.Write(buffer, 0, buffer.Length);

        using (var response = (await request.GetResponseAsync()) as HttpWebResponse)
        {
            using (var responseStream = response.GetResponseStream())
            using (var stream = new StreamReader(responseStream))
            {
                var text = await stream.ReadToEndAsync();
                value = GetValue(text);
                return value;
            }
        }
    }
}
public static async System.Threading.Tasks.Task GetCreditAsync(字符串编号,字符串pun,System.Threading.CancellationToken cancel=default(System.Threading.CancellationToken))
{
var cookieContainer=新的cookieContainer();
var request=System.Net.WebRequest.Create(“http://test.test)作为HttpWebRequest;
使用(cancel.Register(()=>request.Abort(),useSynchronizationContext:false))
{
request.Method=“POST”;
request.CookieContainer=CookieContainer;
request.ContentType=“多部分/表单数据;边界=------------------------------------7e23ca1f27119e”;
var data=“------------------------------------7e23ca1f27119e”
+“\n”+”内容处置:表单数据;名称=\“数据1”
+“\n”+”
+“\n”+数字
+“\n”+”------------------------------------7e23ca1f27119e”
+“\n”+“内容处置:表单数据;名称=\“数据2”
+“\n”+”
+“\n”+双关语
+“\n”+”------------------------------------7e23ca1f27119e--”
+“\n”+”;
var buffer=System.Text.Encoding.UTF8.GetBytes(数据);
使用(var requeststream=await request.GetRequestStreamAsync())
Write(buffer,0,buffer.Length);
使用(var response=(wait request.GetResponseAsync())作为HttpWebResponse)
{
使用(var responseStream=response.GetResponseStream())
使用(var stream=新的StreamReader(responseStream))
{
var text=wait stream.ReadToEndAsync();
value=GetValue(文本);
返回值;
}
}
}
}

您知道如何在Windows Phone上运行此功能吗?

在新的UWP版本中,这似乎是一个固定问题,请参阅有关此问题的详细信息 和

要使Cookie在Windows phone或以前的版本中正常工作,可以尝试在命名空间中使用类和类

//To get/set cookies
using (var protocolFilter = new HttpBaseProtocolFilter())
{
    //get CookieManager instance
    var cookieManager = protocolFilter.CookieManager;
    //get cookies
    var cookies = cookieManager.GetCookies(uri);
    foreach (var cookie in cookies)
    {
        Debug.Write(cookie.Value);
    }
    //you can also SetCookie
    //cookieManager.SetCookie(MyCookie);
}
您可以使用属性定义cookie使用行为

var protocolFilter = new HttpBaseProtocolFilter()
//Do not handle cookies automatically. you can set it as your requirements.
protocolFilter.CookieUsageBehavior = HttpCookieUsageBehavior.NoCookies;
// Create a HttpClient
var httpClient = new HttpClient(protocolFilter);

我发现HttpClient有一个构造函数,它接受
HttpMessageHandler
。虽然
HttpRequest
还没有禁用自动重定向的选项,但可以在
HttpClientHandler
上设置

var cookieContainer = new CookieContainer();
using (var client = new HttpClient(new HttpClientHandler()
{
    CookieContainer = cookieContainer,
    UseCookies = true,
    AllowAutoRedirect = false
}))
{
    var content = new MultipartFormDataContent
        {
            { new StringContent(number), "data1" },
            { new StringContent(pun), "data2" },
        };

    var result = await client.PostAsync(RequestUriString, content, cancel);
    result = await client.GetAsync(RequestUriString, cancel);


    var text = await result.Content.ReadAsStringAsync();
    // ...
 }

不幸的是,这没有起作用。HttpClient没有采用
HttpBaseProtocolFilter
的构造函数。