标签: flurl

无法设置Content-Type标头

我在HttpClient上设置Content-Type时遇到问题.我按照这个问题:如何为HttpClient请求设置Content-Type标头? 但仍然没有运气.

String rcString = JsonConvert.SerializeObject(new RoadsmartChecks() { userguid = user_guid, coords = coordinates, radius = (radius * 100) + "" }, ROADSMART_JSON_FORMAT, JSONNET_SETTINGS);
HttpClient c = new HttpClient();
c.BaseAddress = new Uri(BASE_URL);
c.DefaultRequestHeaders.TryAddWithoutValidation("Content-Type", "application/json"); //Keeps returning false
c.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", hash_aes);
c.DefaultRequestHeaders.TryAddWithoutValidation("Roadsmart-app", Constant.APP_ID);
c.DefaultRequestHeaders.TryAddWithoutValidation("Roadsmart-user", user_guid);
c.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpRequestMessage req = new HttpRequestMessage(HttpMethod.Post, BASE_URL + URL_CHECKS + "/fetch");
req.Content = new StringContent(rcString);
await c.SendAsync(req).ContinueWith(respTask =>
{
    Debug.WriteLine("Response: {0}", respTask.Result);
});
Run Code Online (Sandbox Code Playgroud)

调试器 我也试过使用Flurl库,但在尝试添加'Content-Type'时它崩溃了.

misused header name content-type
Run Code Online (Sandbox Code Playgroud)

那么我该如何强制它以便真正添加呢?提前致谢.

c# httpclient windows-phone-8.1 flurl

13
推荐指数
1
解决办法
3万
查看次数

如何使用Flurl上传文件和表单数据?

我正在尝试上传包含正文内容的文件.是PostMultipartAsync唯一的方法吗?

在我的C#后端代码中我有这个:

var resource = FormBind<StorageFileResource>();
var file = Request.Files.First().ToPostedFile();
Run Code Online (Sandbox Code Playgroud)

FormBind 从请求中读取数据并填充对象.

通过使用PostMultipartAsync我知道它应该像这样开始:

.PostMultipartAsync((mp) => { mp.AddFile(name, stream, name)}),但我无法弄清楚如何添加对象.你有什么想法吗?

这是我目前的尝试:

public static async Task<T> PostFileAsync<T>(string url, object data, string name, Stream stream, object queryString = null)
    where T : class
{
    return await HandleRequest(async () => queryString != null
        ? await url
            .SetQueryParams(queryString)
            .SetClaimsToken()
            .PostMultipartAsync((mp) => { mp.AddFile(name, stream, name)})
            .ReceiveJson<T>()
        : await url
            .SetClaimsToken()
            .PostMultipartAsync((mp) => mp.AddFile(name, stream, name))
            .ReceiveJson<T>());
}
Run Code Online (Sandbox Code Playgroud)

目前正在提出的要求:

在此输入图像描述

c# flurl

10
推荐指数
1
解决办法
3952
查看次数

Flurl.Http自定义错误

我正在创建一个客户端向服务器发出请求的应用程序.服务器使用flurl.Http以node.js和.NET中的客户端编写.

当服务器上的请求失败时,创建自定义错误消息总是有用的.像这样的东西:

request.respond(500, { message: "targetid is mandatory" });
Run Code Online (Sandbox Code Playgroud)

但是,这会在客户端调用FlurlHttpException,并且响应中的JSON信息会丢失.

当从服务器收到不成功的响应代码时,如何收到此JSON信息?

.net json http node.js flurl

9
推荐指数
1
解决办法
3908
查看次数

如何在 Flurl 中为 Web 请求使用代理?

我有一个使用 Flurl 客户端的简单发布请求,我想知道如何使用 IP、端口、用户名和密码等信息使用代理发出此请求。

string result = await atc.Request(url)
    .WithHeader("Accept", "application/json")
    .WithHeader("Content-Type", "application/x-www-form-urlencoded")
    .WithHeader("Host", "www.website.com")
    .WithHeader("Origin", "http://www.website.com")
    .PostUrlEncodedAsync(new { st = colorID, s = sizeID, qty = 1 })
    .ReceiveString();
Run Code Online (Sandbox Code Playgroud)

c# flurl

8
推荐指数
1
解决办法
3114
查看次数

在ASP.Net Core 2.1和IHttpClientFactory中Flurl客户端生命周期

Flurl声明使用单例客户端是推荐的模式:

HttpClient旨在实例化一次,并在应用程序的整个生命周期中重复使用.特别是在服务器应用程序中,为每个请求创建一个新的HttpClient实例将耗尽重负载下可用的套接字数量.这将导致SocketException错误.

但是,自Asp.Net Core 2.1以来,Net Core 2.1中的HttpClient生命周期更新规则.

当您使用HttpClientFactory请求HttpClient时,实际上每次都会获得一个新实例,这意味着我们不必担心会改变它的状态.此HttpClient可能(或可能不)使用池中的现有HttpClientHandler,因此使用现有的打开连接.

如何修改Flurl在引擎盖下使用IHttpClientFactory?我应该创建自定义Flurl settings.HttpClientFactory并通过MS IHttpClientFactory创建HttpClient吗?

http flurl

8
推荐指数
1
解决办法
1335
查看次数

C#Flurl和HttpClient,REST API没有响应

我遇到了使用我的代码从API获得响应的问题,请求没有超时,它根本没有给我回复.我已经在我自己的API中创建了一个api端点,以返回json字符串,然后用"Firefox Poster"手动发布json数据,它运行正常.有了这个,我相信问题出现在我的代码中.

我得到了一个C#WebAPI,我正在开发它与Angular前端一起使用(这是有效的,它仅用于历史).在调用我的API时,我创建了对象"EnrollmentRequestDto"

public class EnrollmentRequestDto
{
    /// <summary>
    /// Context Information for the request. Contains the Ship-To, language code and timezone.
    /// </summary>
    [JsonProperty("requestContext")]
    public RequestContextDto RequestContext { get; set; }
    /// <summary>
    /// Unique ID provided by DEP to reseller on provisioning DEP access. This would be the reseller's DEP ID if its posted by distributor OBO a reseller, and would be his own depResellerId if a reseller is posting for self.
    /// </summary>
    [JsonProperty("depResellerId")]
    public string DepResellerId …
Run Code Online (Sandbox Code Playgroud)

c# json flurl

7
推荐指数
1
解决办法
5156
查看次数

在 flurl 中的表单 url 编码请求中使用 C# 字符

有谁知道如何使用 flurl 通过 url 编码形式发送带括号的字段?

示例:我想发送带有“foo”值的 foo[bar] 字段,如下所示

var response = await "https://server/request"
    .WithHeader("Header1", "headerValue")
    .PostUrlEncodedAsync(new
    {
         foo[bar] = "foo"
    })
Run Code Online (Sandbox Code Playgroud)

c# flurl

7
推荐指数
1
解决办法
2237
查看次数

C# HttpClient 是否支持socks4/5 代理?

我可以使用以下代码设置http代理:

public class CustomFlurlHttpClient : DefaultHttpClientFactory {
    public override HttpClient CreateClient(Url url, HttpMessageHandler m) {
        return base.CreateClient(url, CreateProxyHttpClientHandler("http://192.168.0.103:9090"));
    }

    private HttpClientHandler CreateProxyHttpClientHandler(string proxyUrl, string user = "", string passw = "") {
        NetworkCredential proxyCreds = null;
        var proxyUri = new Uri(proxyUrl);
        proxyCreds = new NetworkCredential (user, passw);
        var proxy = new WebProxy (proxyUri, false) {
            UseDefaultCredentials = false,
            Credentials = proxyCreds
        };
        var clientHandler = new HttpClientHandler {
            UseProxy = true,
            Proxy = proxy,
            PreAuthenticate = true,
            UseDefaultCredentials = false …
Run Code Online (Sandbox Code Playgroud)

c# proxy socks dotnet-httpclient flurl

7
推荐指数
2
解决办法
1万
查看次数

Blazor 0.6.0"擦拭"Flurl兼容性?

将Blazor从0.5.1(使用Flurl)更新到0.6.0后,通过flurl调用会抛出异常:

WASM: [Flurl.Http.FlurlHttpException] Call failed. Cannot invoke method 
because it was wiped. See stack trace for details.
Run Code Online (Sandbox Code Playgroud)

该项目创建了一个HttpClientFactory,它可以让Blazor的HttpClient被Flurl使用:

使用HttpClientFactoryForBlazor使用Blazor的HttpClient(http)创建FlurlClient:

IFlurlClient c = new FlurlClient() { Settings = new Flurl.Http.Configuration.ClientFlurlHttpSettings { HttpClientFactory = new HttpClientFactoryForBlazor(http) }};
Run Code Online (Sandbox Code Playgroud)

使用FlurlClient(c)例如通过Flurl的扩展方法"IFlurlRequest.WithClient(c);"

private class HttpClientFactoryForBlazor : Flurl.Http.Configuration.IHttpClientFactory
{
    private readonly HttpClient httpClient;

    public HttpClientFactoryForBlazor(HttpClient httpClient)
    {
        this.httpClient = httpClient;
    }

    public virtual HttpClient CreateHttpClient(HttpMessageHandler handler)
    {
        return this.httpClient;
    }
}
Run Code Online (Sandbox Code Playgroud)

所以,似乎这种方法不再起作用.

有谁知道如何使用Blazor 0.6.0制作Flurl?

Call-Stack是:

WASM: [Flurl.Http.FlurlHttpException] Call failed. Cannot invoke method because it was wiped. See …
Run Code Online (Sandbox Code Playgroud)

flurl blazor httpclientfactory

7
推荐指数
1
解决办法
582
查看次数

Xamarin 中的 SSL 握手失败

我正在尝试访问我的 RESTful API 以从 MySQL 数据库中检索数据。在我的 C# WPF 项目中,一切都已设置并完美运行。但是当在 Xamarin Forms(为 Android 构建)中使用完全相同的代码时,我无法与我的服务器成功进行 SSL 握手。

服务器详情

  • 让我们加密 SSL 证书(绝对有效)
  • Apache BasicAuth (.htaccess)
  • 仅 HTTPS(重写 HTTP),因此端口 443
  • REST API: php-crud-api (by mevdschee) 访问 MariaDB 10.3

我正在使用 Flurl.Http(使用 HttpClient)来建立连接,但在 jsonReader.Wait() 上出现异常:

var jsonReader = "https://example.com/my_api/api.php/records/my_table?order=id,desc&size=10"
            .WithHeader("Accept", "application/json")
            .WithBasicAuth("username", "password")
            .GetJsonAsync<JsonRootObject>();
            // Wait for completion.
            jsonReader.Wait();
Run Code Online (Sandbox Code Playgroud)


这是我的 AggregateException:

System.AggregateException: One or more errors occurred. (Call failed. An error occurred while sending the request
GET https://example.com/my_api/api.php/records/my_table?order=id,desc&size=10) ---> Flurl.Http.FlurlHttpException: Call failed. An error occurred while …
Run Code Online (Sandbox Code Playgroud)

c# ssl xamarin flurl lets-encrypt

7
推荐指数
1
解决办法
5275
查看次数