繁体   English   中英

在ServiceStack JsonServiceClient上设置Accept标头

[英]Set Accept header on ServiceStack JsonServiceClient

我正在使用ServiceStack.JsonServiceClient尝试使用接受标头的自定义值发出URL请求,但是无法找到进行调用的方法。

该服务调用是通过GitHub API检索存储库的主题。 当前,这是预览功能,需要其他信息作为自定义媒体类型在accept标头上发送。 https://developer.github.com/v3/repos

我正在使用Service Stack并对API端点进行C#.NET调用,而我正努力寻找适当的方法来更新请求上的accept标头。 我已经尝试了两个阶段。

  1. 创建带有标题的HttpWebRequest并将其传递给客户端

      Uri uri = new Uri(requestUrl, UriKind.Absolute); HttpWebRequest webRequest = (HttpWebRequest) WebRequest.Create(uri); webRequest.Accept = "application/vnd.github.mercy-preview+json"; HttpWebResponse webResponse = client.Get<HttpWebResponse>(webRequest); 

    requestUrl是形式为https://api.github.com/repos/{owner}/{repo}?access_token={token}的字符串。 它成功创建了Uri和HttpWebRequest对象,但随后在client.Get上引发了异常,并声明Invalid URI: The format of the URI could not be determined.

    使用字符串URL调用API: HttpWebResponse webResponse = client.Get<HttpWebResponse>(requestUrl); 成功而没有问题(但未传递自定义标头值)。

  2. 在客户端本身上设置标头。 client.AddHeaders会引发异常,因为Accept是受限制的标头。 我一直找不到其他方法可以直接在客户端上设置标头(尽管这可能是最好的解决方案)。

谢谢,让我知道我还有什么可以提供的。

您可以在发送请求之前使用RequestFilter修改HttpWebRequest ,例如:

var client = new JsonServiceClient(baseUrl) {
    RequestFilter = req => req.Accept = acceptHeader
};

注意:ServiceStack的C#/。NET服务客户端仅应用于调用ServiceStack服务。 为了调用第三方API,您应该改用HTTP Utils ,例如:

var body = url.GetStringFromUrl(requestFilter: req => {
    req.Accept = acceptHeader;
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM