【发布时间】:2014-09-23 07:56:33
【问题描述】:
我肯定错过了一点,但你知道为什么我的客户使用 RestSharp (v 104.4.0) 调用会得到 400 - Bad Request 当我同时使用 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() 在 System.Web.HttpApplication.PipelineStepManager.ValidateHelper(HttpContext 上下文)
如果使用来自提琴手作曲家的类似请求,我会得到成功的响应:
【问题讨论】:
-
我不确定这一点,因为您模糊了部分 URL,但您可以检查您的 URL 是否包含以下字符:' * % & : \ ?'与否,因为它会被视为危险的 URL 路径。
-
"/" + CurrentPlatform.Id + "/assets/" + assetId 到底给出了什么?
-
@reptildarat :你说得对,我的请求是来自我们内部的 PresentationServer.CreateRequest() 方法的格式错误。它创建像这样的网址:“server/api/platformid/http://server/api/platformid/assets/xxxxx/…”