【问题标题】:Using a backslash (%5c) in a REST WCF URL在 REST WCF URL 中使用反斜杠 (%5c)
【发布时间】:2010-09-17 03:23:02
【问题描述】:

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

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

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

但是,当我尝试访问http://server/profiles.svc/DOMAIN%5cusername 的服务时(%5c 是反斜杠的 urlencoded 形式),我收到以下错误:

“/”应用程序中的服务器错误
HTTP 错误 400 - 错误请求

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

是否需要将一些设置添加到我的 Web 服务配置中才能允许将反斜杠添加到 REST WCF 服务中的 URL?还是根本不允许使用反斜杠?

【问题讨论】:

    标签: wcf url rest


    【解决方案1】:

    我怀疑它们根本不允许出现在 url 的那部分。只要对它们进行编码,它们就可以在查询字符串中使用。作为一般规则,我不会在文件名中无效的 url 的路径部分中放置任何内容(即?)。

    也许您可以使用不同的字符来区分域与用户名。

    您还可以将用户名分成域名和用户名,并使用正常的路径分隔符“/”。我对此并不熟悉,无法确定您是否这样做,但这是我最好的猜测。

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

    【讨论】:

    • 这似乎是正确的做法 (/{domainName}/{userName}),因为域和名称具有层次关系,可以用 REST 很好地表达。
    • 不错的解决方案。我们也必须从 REST url 中省略 /。
    猜你喜欢
    • 1970-01-01
    • 2015-08-11
    • 1970-01-01
    • 2015-03-26
    • 1970-01-01
    • 2011-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多