我有一个带有Web API 2的OData服务,底层SQL Server数据库表上的ID列(nvarchar,主键)可能包含反斜杠。在这些情况下,我收到404错误。
我已尝试将该字符编码为%5C,但它无效。有什么建议吗?
This works fine:
GET http://mydomain:myport/odata/Users('SomeIdentifier')
This does not work:
GET http://mydomain:myport/odata/Users('mydomain%5Cmyuser')
谢谢!
答案 0 :(得分:0)
您需要在服务器上启用双重编码,并在请求网址中将“\”更改为“%255C”。
答案 1 :(得分:0)
我找到的最好方法是使用自定义编码将odata URI字符串作为put或patch请求放入正文中。
/// <summary>
/// Replace character that mess up url literals in odata uri
/// </summary>
/// <param name="search_words">Literal String to replace holder tags</param>
/// <returns>Processed String</returns>
public static string UnEncodeOdataUri(string search_words)
{
return search_words.Replace("[GREATER]", @">")
.Replace("[LESS]", @"<")
.Replace("[STAR]", @"*")
.Replace("[EQUAL]", @"=")
.Replace("[COLON]", @":")
.Replace("[SQUOTE]", "'")
.Replace("[SQUOTE]", "'")
.Replace("[PERCENT]", "%")
.Replace("[PLUS]", "+")
.Replace("[FSLASH]", @"/")
.Replace("[BSLASH]", @"\")
.Replace("[QUESTION]", "?")
.Replace("[POUND]", "#")
.Replace("[AMPERSAND]", "&")
.Replace("[DQUOTE]", "\"");
}