Dom*_*ton 5 c# asp.net-web-api
我正在使用包含 / (%2f) 的参数调用 WebAPI 方法。如果我用没有这个字符的参数来调用它,它就可以正常工作。
按照此链接Escape characters in WebApi call中的建议,我尝试了以下操作,但没有任何区别。
<httpRuntime targetFramework="4.5.1" relaxedUrlToFileSystemMapping="true"/>
Run Code Online (Sandbox Code Playgroud)
我用来调用 WebAPI 方法的代码如下
var id = "AA/F1"; // This causes a problem of 404 not found
var workingId = "BB-F2"; // This works fine
using (var client = new HttpClient(new HttpClientHandler {AutomaticDecompression = DecompressionMethods.GZip}))
{
var uri = new Uri(string.Format("http://[testServer]/[Controller]/Get/{0}", WebUtility.UrlEncode(id)));
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
var response = client.GetAsync(uri).GetAwaiter().GetResult();
if (response.IsSuccessStatusCode)
return JsonConvert.DeserializeObject<ReturnType>(response.Content.ReadAsStringAsync().GetAwaiter().GetResult());
throw new Exception(response.ReasonPhrase);
}
Run Code Online (Sandbox Code Playgroud)
我只配置了一条路线 - 如下所示:
GlobalConfiguration.Configuration.Routes.MapHttpRoute("Default", "{controller}/{action}/{id}", new { id = RouteParameter.Optional });
Run Code Online (Sandbox Code Playgroud)
我也尝试过使用 Fiddler 直接点击它并得到相同的错误。
你可以试试 var id = "AA%2fF1";
更新:
您还可以使用 Base64 编码,类似于:
var id = "AA/F1";
var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(id);
var encodedId = System.Convert.ToBase64String(plainTextBytes);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2926 次 |
| 最近记录: |