有没有办法在 C# 中传递这个内容类型“application/x-www-form-urlencoded;v=2.0”?

Posted

技术标签:

【中文标题】有没有办法在 C# 中传递这个内容类型“application/x-www-form-urlencoded;v=2.0”?【英文标题】:Is there a way to pass this contenttype "application/x-www-form-urlencoded;v=2.0" in C#? 【发布时间】:2020-05-17 00:41:22 【问题描述】:

我正在尝试在 C# 中复制 CURL 中的以下代码。请注意,此代码与 curl 一起正常工作。我正在使用这个https://curl.olsh.me/ 来创建请求。

curl -k -u "默认用户:robotics" -H "Content-Type: application/x-www-form-urlencoded;v=2.0" -d "value=TRUE" "https://localhost/rw/rapid/symbol/RAPID/T_ROB1/EGMDemo/run_egm/data?mastership=implicit"

我已尝试将此命令翻译成 c# 并到达该行时:

request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded;v=2.0");

我收到 application/x-www-form-urlencoded;v=2.0 无效的异常。 如何传递此内容类型?如果使用 httpclient 无法实现,还有其他方法吗?


    var handler = new HttpClientHandler();
    handler.ServerCertificateCustomValidationCallback = (requestMessage, certificate, chain, policyErrors) => true; 

    using (var httpClient = new HttpClient(handler))
    
        using (var request = new HttpRequestMessage(new HttpMethod("POST"), "https://localhost/rw/rapid/symbol/RAPID/T_ROB1/EGMDemo/run_egm/data?mastership=implicit"))
        
            var base64authorization = Convert.ToBase64String(Encoding.ASCII.GetBytes("Default User:robotics"));
            request.Headers.TryAddWithoutValidation("Authorization", $"Basic base64authorization"); 

            request.Content = new StringContent("value=TRUE");
            request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded;v=2.0"); 

            var response = await httpClient.SendAsync(request);
        
    


【问题讨论】:

【参考方案1】:

你可以尝试直接使用 request.Content.Headers.Add("Content-Type", "application/x-www-form-urlencoded;v=2.0");

MediaTypeHeaderValue 仅支持为 HTTP/1.1 定义的标准媒体类型

编辑错误:)

【讨论】:

我收到此异常;标题名称使用不正确。确保请求标头与 HttpRequestMessage 对象一起使用,响应标头与 HttpResponseMessage 对象一起使用,内容标头与 HttpContent 对象一起使用 对不起,我错了,是request.Content.Headers.Add("Content-Type", "application/x-www-form-urlencoded;v=2.0");你应该把这个Header添加到Content对象

以上是关于有没有办法在 C# 中传递这个内容类型“application/x-www-form-urlencoded;v=2.0”?的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中仅将类型作为参数传递

有没有办法在带有 C# 的 WebAPI 中使用泛型来使用端点?

在 C 中指定枚举类型的大小

C#和.Ne学习第十天

C#之泛型

c#中值类型与引用类型的值传递与引用传递