我肯定错过了一个观点,但是你知道为什么我的客户端使用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作曲家的类似请求,我会得到成功的回复:
答案 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 。
你应该考虑增加它。