我遇到了ASP.NET Web API路由问题。具体来说,我想传递一个字符串参数,该参数为空或在Uri中包含斜杠。但不幸的是,这打破了路由。
我已经设置了正确的路线,如果我有一个普通的字符串,例如“fubar”,那么匹配正常。我试图传递字符串url编码,但这不起作用。显然问题是某些http sys层已经解码了字符串,意味着没有"fu%2fbar"
到达,而是"fo/bar"
- 这导致了另一条路由。
当我传递一个空字符串时,uri为"api//..."
,两个/
合并,并且该段被丢弃。
解决内部/
问题的一种方法是对Uri进行双重编码并在我的方法中对其进行解码。但这似乎是一个非常糟糕的选择,所以我正在寻找其他方法来解决这个问题。
答案 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)
我建议:
将请求类型更改为POST并将字符串放入请求正文
或添加一个拦截器(DelegatingHandler),它将获取请求并重写URL中的param,例如:通过替换无效字符