2

我在使用 ASP.NET Web API 路由时遇到问题。具体来说,我想在 Uri 中传递一个空的或包含斜杠的字符串参数。但不幸的是,这破坏了路由。

我已经设置了正确的路由,如果我有一个普通的字符串,例如“fubar”,它匹配得很好。我试图传递编码的字符串 url,但这不起作用。显然问题是一些 http sys 层已经在解码字符串,这意味着没有"fu%2fbar"到达,但是"fo/bar"- 这导致了另一条路线。

另外,当我传递一个空字符串时, uri is "api//...",两者/被合并,段被丢弃。

解决/内部问题的一种方法是对 Uri 进行双重编码并在我的方法中对其进行解码。但这似乎是一个非常非常糟糕的选择,所以我正在寻找其他方法来解决这个问题。

4

2 回答 2

1

对于斜线,您可以准备特殊路线

            "{controller}/{action}/{param1}/{param2}/{param3}"
            "{controller}/{action}/{param1}/{param2}"
            "{controller}/{action}/{param1}"


    public ActionResult Index(string param1, string param2, string param3)
    {
        string param = string.Concat(param1, param2, param3);

这样,fu 和 bar 是两个参数。

对空字符串没有任何解决方案。我会在客户端应用程序中用空格字符或其他表示“空”但不是

于 2013-01-20T11:37:20.713 回答
0

我建议:

  1. 将请求类型更改为 POST 并将字符串放入请求的正文中

  2. 或添加一个拦截器(DelegatingHandler),它将获取请求并重写 url 中的参数,例如通过替换无效字符

于 2013-01-20T14:27:32.080 回答