如何将URL作为查询字符串中的变量传递给我的控制器?

时间:2009-04-09 04:37:07

标签: asp.net-mvc

我正在尝试传递一个url作为我的控制器的参数:

//Passed in via url like this: 
//http://www.mydomain.com/Puzzle/ContinuePuzzle/{insert url here}
public ActionResult ContinuePuzzle(string url)
{
    return View("PuzzleWrapper", 
                 (object)_PuzzleService.ContinuePuzzle(url);
}

每当我尝试这个时,我都会收到一个http 400 Bad Request错误。我试过UrlEncoding它,但它仍然不喜欢它。有什么建议吗?

3 个答案:

答案 0 :(得分:3)

我怀疑在URL中有两个方案声明导致默认路由处理程序抛出400响应。

作为一种解决方法,我只会发送不带方案的URL(即http://)。我测试了这个场景没有任何问题:

  

http://www.mydomain.com/Puzzle/ContinuePuzzle/www.domain.com/nextpuzzle

使用此路线:

routes.MapRoute("Puzzle", "Puzzle/ContinuePuzzle/{*url}", new {controller = "Puzzle", action = "ContinuePuzzle", url = ""});

如果你必须拥有该方案,那么使用像Charlino建议的查询字符串参数。

答案 1 :(得分:0)

如果你把它放在括号中怎么办?

让网址上的http://再次启动是一个无效的地址。

http://www.mydomain.com/Puzzle/ContinuePuzzle/(http://mypuzzlingdomain.com/?a4)

也许大括号也可以起作用。

答案 2 :(得分:-1)

UrlEncode它但是把它作为get变量传递......?

E.g。 http://www.mydomain.com/Puzzle/ContinuePuzzle?url=http%3a%2f%2fmypuzzlingdomain.com%2f%3fa4