【问题标题】:URL rewriting from a url in querystring to more friendly url从查询字符串中的 url 重写为更友好的 url
【发布时间】:2014-10-31 06:03:49
【问题描述】:

我在重写我的网址时遇到了问题。到目前为止,我的 url 是带有参数的查询字符串的形式。现在我想将该网址更改为更友好的网址 .举个例子吧

http://localhost:59423/SomeController/SomeActionMethod?Id=7

类似

http://localhost:59423/SomeController/SomeActionMethod/7

或类似的东西。

现在我必须在 route.config 文件中进行修改,但我没有得到确切的修改

我添加了类似的东西

     routes.MapRoute(
                 name: "SomeName",
                 url: "SomeController/SomeActionMethod/{Id}",
                 defaults: new { controller = "SomeController", action ="SomeActionMethod" });

如果我输入,我现在可以访问视图

   http://localhost:59423/SomeController/SomeActionMethod/7

但是当我把 url 作为

http://localhost:59423/SomeController/SomeActionMethod?Id=7

这应该会自动更改为

http://localhost:59423/SomeController/SomeActionMethod/7

它是否应该自动更改为正确的 url 。如果没有,那怎么办?如果是,那么我缺少什么,因为它没有改变

动作方法

         public ActionResult SomeActionMethod(string Id)
    {

        return View((Id));
    }

【问题讨论】:

  • 发布你的RouteConfig.cs文件的内容
  • 我知道我必须添加另一个 routes.mapRoute。您不能根据我上面提供的内容来判断吗?
  • 不,您不必再添加一个。事实上,默认路由正确处理了这个问题,所以我假设你已经改变了一些东西。除非你展示你已经拥有的东西,否则我无能为力。我还建议您添加SomeActionMethod 的签名以及如何在视图中生成链接。
  • 我已经编辑了我的问题。请检查
  • 这就是我在回答中提到的......因为你已经将参数命名为Id,你应该在你的操作方法中将参数名称命名为相同的东西......你能发布签名动作方法?

标签: asp.net asp.net-mvc-4 url url-rewriting


【解决方案1】:

经过多次尝试和错误,我找到了我想要的东西

正如我在问题中已经提到的,您可以在 route.config 文件中添加 map.route

类似的东西

routes.MapRoute(
             name: "SomeName",
             url: "SomeController/SomeActionMethod/{Id}",
             defaults: new { controller = "SomeController", action ="SomeActionMethod" });

或者如果你在“SomeActionmethod”中有两个参数,那么

routes.MapRoute(
             name: "SomeName",
             url: "SomeController/SomeActionMethod/{Id}/{parameter2}",
             defaults: new { controller = "SomeController", action ="SomeActionMethod" });

现在你必须有一个查询字符串。像这样的

document.location = "/SomeController/SomeActionMethod?Id=" + SomeId + "&parameter2=" + SomeParameter;

现在,既然您已经编写了 map.route,您可以将上述查询字符串更改为类似这样的内容

"/SomeController/SomeActionMethod/" + SomeId + "/" + SomeParameter;

每当调用此 url 时,它将与您在 route.config 文件中提供的路由信息​​进行映射,正如我在上面给出的那样。并且据此它知道你在 "SomeActionMethod" 中有两个参数 {Id} 和 {parameter2} ,所以它会自动渲染动作方法并传递变量。

因此,您可以消除在 url 中包含查询字符串的需要,并且实际上具有更友好的 url,即斜杠“/”。

希望它可以帮助任何寻找相同问题的人。

【讨论】:

    【解决方案2】:

    通过使用 IIS URL 重写,您可以根据需要进行配置。 URL Rewrite

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-27
      • 1970-01-01
      • 1970-01-01
      • 2019-10-31
      • 2011-09-22
      • 1970-01-01
      • 2020-06-02
      相关资源
      最近更新 更多