C# 坚持使用POST多部分表单数据-Xamarin.forms

C# 坚持使用POST多部分表单数据-Xamarin.forms,c#,xamarin,xamarin.forms,C#,Xamarin,Xamarin.forms,我一直在使用xamarin.forms中的post multipart表单数据。当我尝试使用POSTMAN时,一切正常,但我在xamarin.forms中的代码不起作用。我不知道代码出了什么问题。我正在使用图书馆电话 这是邮递员密码 var client = new RestClient("http://192.168.2.126:86/Appointment.svc/UploadFileios"); var request = new RestRequest(Method.POST);

我一直在使用xamarin.forms中的post multipart表单数据。当我尝试使用POSTMAN时,一切正常,但我在xamarin.forms中的代码不起作用。我不知道代码出了什么问题。我正在使用图书馆电话

这是邮递员密码

    var client = new RestClient("http://192.168.2.126:86/Appointment.svc/UploadFileios");
var request = new RestRequest(Method.POST);
request.AddHeader("postman-token", "11a61861-ed9c-2f35-751b-6b615907c269");
request.AddHeader("cache-control", "no-cache");
request.AddHeader("content-type", "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW");
request.AddParameter("multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW", "------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"phone\"\r\n\r\n81234518\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"address\"\r\n\r\nAddress Dummy House\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"password\"\r\n\r\n123\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"confpassword\"\r\n\r\n123\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"name\"\r\n\r\nAlex Chengalan Paily\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
下面是我使用xamarin.forms的代码

    var client = new RestClient(url);
                    var request = new RestRequest(Method.POST);
                    string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x");
                    //string boundary = "----WebKitFormBoundary7MA4YWxkTrZu0gW";
                    request.AddHeader("cache-control", "no-cache");
                    request.AddHeader("content-type", "multipart/form-data; boundary=" + boundary);
                    string name = "multipart/form-data; boundary=" + boundary;


                    string formdataTemplate = "--" + boundary +
                        "\r\nContent-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}\r\n";
                    string formitem = null;
                    foreach (string key in nvc.Keys)
                    {
                        formitem = formitem + string.Format(formdataTemplate, key, nvc[key]);
                    }
                    Debug.WriteLine("Items: " + formitem);
                    request.AddParameter(name, formitem, ParameterType.RequestBody);
IRestResponse response = await client.Execute(request);

但我从服务器这里得到一个解析错误。请帮我解决这个问题。

我对RestSharp库不太熟悉,但这里有一个工作示例,支持文件流和其他变量,没有任何第三方依赖项,并且使用PCL中的Xamarin.Forms(请注意,您不需要手动处理边界):

试试看
{
var file=await PCLStorage.FileSystem.Current.LocalStorage.GetFileAsync(device.ClientCodePhoto);
使用(Stream fileStream=await file.OpenAsync(PCLStorage.FileAccess.Read))
使用(var client=new HttpClient())
使用(var content=new MultipartFormDataContent())
{
添加(新的StreamContent(fileStream),“client_code_image”,“upload.jpg”);
var值=新[]
{
新的KeyValuePair(“客户端代码”,device.ClientCode),
新的KeyValuePair(“registered_by”,device.RegisteredBy),
新的KeyValuePair(“notes”,device.notes??string.Empty),
新的KeyValuePair(“sim_代码”,device.SimCode),
新的KeyValuePair(“qr_码”,设备qr码)
};
foreach(值中的var keyValuePair)
Add(新的StringContent(keyValuePair.Value),string.Format(“\{0}\”,keyValuePair.Key));
使用(var result=wait client.PostAsync($“{Constants.Server}devices/”,content))
{
var input=await result.Content.ReadAsStringAsync();
if(结果。IsSuccessStatusCode)
{
//对结果做点什么
}
}
}
}
捕获(例外情况除外)
{
Debug.WriteLine(例如消息);
//出了点问题
}

嗯,这取决于要传递到端点的内容。 这项工作:

Uri baseAddress = new Uri("https://" + "www.url.com");
                    CookieContainer cookieContainer = new CookieContainer();
                    using (HttpClientHandler handler = new HttpClientHandler() { CookieContainer = cookieContainer })
                    using (HttpClient client = new HttpClient(handler) { BaseAddress = baseAddress })
                    using (MultipartFormDataContent content = new MultipartFormDataContent())
                    {
                        KeyValuePair<string, string>[] values = new[]
                                                  {
            new KeyValuePair<string, string>("attachment", ""),

        };





                        foreach (KeyValuePair<string, string> keyValuePair in values)
                        {
                            content.Add(new StringContent(keyValuePair.Value), string.Format("\"{0}\"", keyValuePair.Key));
                        }

                        //for cookies
                        cookieContainer.Add(baseAddress, new Cookie("name", "value"));



                        client.DefaultRequestHeaders.Add("cache-control", "no-cache");
                        client.DefaultRequestHeaders.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3");
                        client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Linux; Android 8.0.0; SM-G960F Build/R16NW) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.84 Mobile Safari/537.36");
                        //client.DefaultRequestHeaders.Add("Content-Type", "multipart/form-data");
                        client.DefaultRequestHeaders.Add("DNT", "1");
                        client.DefaultRequestHeaders.Add("Upgrade-Insecure-Requests", "1");
                        client.DefaultRequestHeaders.Add("Origin", "https://www.url.com");

                        string finalUrl = "/url";


                        using (HttpResponseMessage result = await client.PostAsync(finalUrl, content))
                        {
                            string input = await result.Content.ReadAsStringAsync();

                            if (result.IsSuccessStatusCode)
                            {
                                return true;
                            }
                        }
                    }
uribaseaddress=newuri(“https://“+”www.url.com”);
CookieContainer CookieContainer=新CookieContainer();
使用(HttpClientHandler处理程序=新的HttpClientHandler(){CookieContainer=CookieContainer})
使用(HttpClient客户端=新HttpClient(处理程序){BaseAddress=BaseAddress})
使用(MultipartFormDataContent=new MultipartFormDataContent())
{
KeyValuePair[]值=新[]
{
新的KeyValuePair(“附件”),
};
foreach(值中的KeyValuePair KeyValuePair)
{
Add(新的StringContent(keyValuePair.Value),string.Format(“\{0}\”,keyValuePair.Key));
}
//饼干
添加(基本地址,新Cookie(“名称”,“值”));
client.DefaultRequestHeaders.Add(“缓存控制”、“无缓存”);
client.DefaultRequestHeaders.Add(“Accept”、“text/html、application/xhtml+xml、application/xml;q=0.9、image/webp、image/apng、*/*;q=0.8、application/signed exchange;v=b3”);
client.DefaultRequestHeaders.Add(“用户代理”、“Mozilla/5.0(Linux;Android 8.0.0;SM-G960F构建/R16NW)AppleWebKit/537.36(KHTML,类似Gecko)Chrome/62.0.3202.84 Mobile Safari/537.36”);
//client.DefaultRequestHeaders.Add(“内容类型”、“多部分/表单数据”);
client.DefaultRequestHeaders.Add(“DNT”,“1”);
client.DefaultRequestHeaders.Add(“升级不安全请求”,“1”);
client.DefaultRequestHeaders.Add(“Origin”https://www.url.com");
字符串finalUrl=“/url”;
使用(HttpResponseMessage结果=wait client.PostAsync(finalUrl,content))
{
字符串输入=wait result.Content.ReadAsStringAsync();
if(结果。IsSuccessStatusCode)
{
返回true;
}
}
}

您收到的错误是什么?这是一个从后端触发的解析异常,这是一条自定义消息。您可以共享解析错误消息吗?也许这个链接会对你有所帮助
Uri baseAddress = new Uri("https://" + "www.url.com");
                    CookieContainer cookieContainer = new CookieContainer();
                    using (HttpClientHandler handler = new HttpClientHandler() { CookieContainer = cookieContainer })
                    using (HttpClient client = new HttpClient(handler) { BaseAddress = baseAddress })
                    using (MultipartFormDataContent content = new MultipartFormDataContent())
                    {
                        KeyValuePair<string, string>[] values = new[]
                                                  {
            new KeyValuePair<string, string>("attachment", ""),

        };





                        foreach (KeyValuePair<string, string> keyValuePair in values)
                        {
                            content.Add(new StringContent(keyValuePair.Value), string.Format("\"{0}\"", keyValuePair.Key));
                        }

                        //for cookies
                        cookieContainer.Add(baseAddress, new Cookie("name", "value"));



                        client.DefaultRequestHeaders.Add("cache-control", "no-cache");
                        client.DefaultRequestHeaders.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3");
                        client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (Linux; Android 8.0.0; SM-G960F Build/R16NW) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.84 Mobile Safari/537.36");
                        //client.DefaultRequestHeaders.Add("Content-Type", "multipart/form-data");
                        client.DefaultRequestHeaders.Add("DNT", "1");
                        client.DefaultRequestHeaders.Add("Upgrade-Insecure-Requests", "1");
                        client.DefaultRequestHeaders.Add("Origin", "https://www.url.com");

                        string finalUrl = "/url";


                        using (HttpResponseMessage result = await client.PostAsync(finalUrl, content))
                        {
                            string input = await result.Content.ReadAsStringAsync();

                            if (result.IsSuccessStatusCode)
                            {
                                return true;
                            }
                        }
                    }