为什么RestSharp得到400 - 当Fiddler获得200时BadRequest - 好吗?

时间:2014-09-23 07:56:34

标签: c# restsharp

我肯定错过了一个观点,但是你知道为什么我的客户端使用RestSharp(v 104.4.0)调用得到400 - 错误请求同时如果我请求使用fiddler我得到200 - OK

以下是我的客户代码:

  public System.IO.Stream OpenRead(string assetId)
    {
        var request = PresentationServer.CreateRequest("/" + CurrentPlatform.Id + "/assets/" + assetId, true, Method.GET);
        var response = RestClient.Execute<SingleResource<Asset>>(request);
        if (response.Data == null)
            return null;

        var asset = response.Data.Resource;

        if (response.Data.Resource.MimeType.Contains("image"))
        {
            var contentUri = response.Data.Links.FirstOrDefault(el => el.Rel == "content");
            if (contentUri == null) throw new Exception("Asset content Uri not found");

            var contentRequest = PresentationServer.CreateRequest(contentUri.Href, true, Method.GET);
            contentRequest.AddHeader("Accept",asset.MimeType);
            contentRequest.AddHeader("Content-Type", asset.MimeType);

            var contentResponse = RestClient.Execute(contentRequest);

            if (contentResponse.StatusCode != HttpStatusCode.OK)
                throw new Exception("Asset content request failed :" + contentResponse.ErrorMessage);

            var stream = new MemoryStream();
            stream.Write(contentResponse.RawBytes, 0, contentResponse.RawBytes.Length);
            return stream;

        }

        return null;
    }

RestSharp的ContentResponse.Content遇到这种错误:

  

System.Web.HttpException(0x80004005):有潜在危险   从客户端(:)检测到Request.Path值。在   System.Web.HttpRequest.ValidateInputIfRequiredByConfig()at   System.Web.HttpApplication.PipelineStepManager.ValidateHelper(HttpContext的   上下文中)

如果使用来自fiddler作曲家的类似请求,我会得到成功的回复:

enter image description here

3 个答案:

答案 0 :(得分:1)

有很多文章可以解决此问题,请参阅此处:Article

您可以在配置文件中更改此行为:

<system.web>
    <httpRuntime requestPathInvalidCharacters="<,>,*,%,&,:,\,?" />
</system.web>

或者回到.Net 2.0验证:

<system.web>
    <httpRuntime requestValidationMode="2.0" />
</system.web>

答案 1 :(得分:1)

这是我们方面的错误,错误消息是明确的:

  

从中检测到潜在危险的Request.Path值   客户(

我们做了一个错误的请求,因为我们将普通网址添加到根服务器网址:

http://RESTserver/api/http://RESTserver/api/resources/xxxxx/content

感谢所有花时间试图帮助我的人。

答案 2 :(得分:-1)

HttpWebRequest.DefaultMaximumErrorResponseLength默认值为 65536

你应该考虑增加它。