如果ID包含反斜杠,则无法从OData Web API检索数据

时间:2014-05-06 19:16:12

标签: url encoding odata asp.net-web-api asp.net-web-api2

我有一个带有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')

谢谢!

2 个答案:

答案 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]", "\""); 
    }