代码之家  ›  专栏  ›  技术社区  ›  Amit Kothari

在REST WCF URL中使用反斜杠(%5c)

  •  1
  • Amit Kothari  · 技术社区  · 17 年前

    我正在WCF上构建一个REST服务,我正在编写的方法之一是GetProfile,它将返回给定用户名的配置文件。用户名将包括用户的域,因此将采用以下格式:“域\用户名”。

    因此,我有一个名为Profiles.svc的服务,它设置了以下端点:

    [OperationContract]
    [WebGet(UriTemplate = "/{username}", ResponseFormat = WebMessageFormat.Xml)]
    IRestResponse GetProfile(String username);
    

    但是,当我尝试访问以下位置的服务时: http://server/profiles.svc/DOMAIN%5cusername

    Server error in '/' Application
    HTTP Error 400 - Bad Request

    即使在我的GetProfile实现中没有实际定义代码时,也会发生这种情况,因此我相信在WCF尝试将URI绑定到方法时会抛出错误。

    1 回复  |  直到 17 年前
        1
  •  5
  •   Greg Dean    17 年前

    我怀疑它们根本不允许出现在url的这一部分。只要对它们进行编码,它们在查询字符串中就没有问题。一般来说,我不会在url的路径部分放置任何文件名无效的内容(即?)。

    也许您可以使用不同的字符从用户名中删除该域。

    [OperationContract]
    [WebGet(UriTemplate = "/{domainName}/{username}", ResponseFormat = WebMessageFormat.Xml)]
    IRestResponse GetProfile(String domainName, String username);