将字符串作为包含斜杠的uri参数传递或为空

时间:2013-01-20 11:19:40

标签: c# asp.net-web-api asp.net-web-api-routing

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

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

当我传递一个空字符串时,uri为"api//...",两个/合并,并且该段被丢弃。

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

2 个答案:

答案 0 :(得分: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就是两个参数。

没有任何空字符串解决方案。我会在客户端应用程序中用空格char或其他东西替换它,这意味着“空”但不是

答案 1 :(得分:0)

我建议:

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

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