【问题标题】:MVC3 URL as parameterMVC3 URL 作为参数
【发布时间】:2011-06-28 11:59:29
【问题描述】:

我想创建一个接收 URL 作为参数的 MVC 应用程序。如何实现?

  1. 直接在 URL 上接收参数?
  2. 创建 Get 和 Post 方法,在内部将 URL 从 Get 一号传递到 Post 一号?

我尝试了第一个选项,但仍然无法接收像 http://website/controller/method/http://otherurl.com 这样的 URL

我是否必须创建新路线才能实现这一目标?

谢谢大家。

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-routing


    【解决方案1】:

    我建议您使用查询字符串参数,并确保该值是正确的 url 编码:

    http://website/controller/method?url=http%3A%2F%2Fotherurl.com
    

    在行动内部:

    public ActionResult Method(string url)
    {
        // The url parameter here will equal to "http://otherurl.com"
        ...
    }
    

    【讨论】:

      【解决方案2】:

      URL 由两部分组成,第一部分是域(我认为),这里重要的是第二部分,称为查询字符串。 (第一部分是强制性的,第二部分不是)。

      这是一个例子:

      http://your-domain-here/stuff?page=1
      

      现在page 是一个查询字符串变量。您必须注意 ? 将 Url 的两个部分分开,我在您的 URL 中看不到一个,因此 IMO,MVC 路由引擎将尝试将整个 Url 与已注册的路由匹配(找不到)。

      不,我会说,您不必创建新路由,当我们需要新的“路径”时会创建新路由,但在您的情况下,您只需要改进 URL 以分隔路由查询字符串。

      希望对您有所帮助。

      【讨论】:

        【解决方案3】:

        您必须创建另一条路线, 类似:

        routes.MapRoute( "UrlByParam", //Route Name
        "{controller}/{action}/{url}", //Url Pattern
        new { controller = "DefaultController", action = "DefaultAction" }); //Defaults
        

        您还必须对您的网址进行编码, 所以,

        http://website/controller/method/http://otherurl.com
        

        会变成

        http://website/controller/method/http%3A%2F%2Fotherurl.com
        

        【讨论】:

          猜你喜欢
          • 2023-03-10
          • 2023-03-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-06-10
          • 2015-05-16
          相关资源
          最近更新 更多