【问题标题】:mvc add query string variablemvc 添加查询字符串变量
【发布时间】:2015-09-09 20:57:11
【问题描述】:

目前在我的 rewriterules.config 中,我设置了以下规则:

  <rule name="PublicUrl" stopProcessing="true">
    <match url="^public-url.html$" />
    <action type="Rewrite" url="public-url.html?query=string" />
 </rule>

我使用的是 MVC 版本 4,想知道是否有办法在 RouteConfig.cs 中添加查询字符串(向后兼容所需),而不是在 rewriterules.config 中添加。

控制器中的动作结果如下所示:

public ActionResult Test(string strParam)
{

    return View("BuildingListingPage");
}

RouteConfig.cs 中的路由如下所示:

routes.MapRoute(
name: "Publicurl",
       url: " public-url.html ",

            defaults: new { controller = "Home", action = "Test", strParam = "hi there”,  querystring = "addme" }
       );

我在这里的尝试是将默认值中的查询字符串附加到查询字符串变量中。如果我要从视图中使用 actionlink 或 URLHelper,我相信不匹配的参数确实会附加到查询字符串中。

我还尝试创建一个实现 RouteBase 的自定义类并将值添加到 RouteValue,但这并没有实现我的目标。

这里的问题是,是否有办法从 Routeconfig.cs 中将变量附加到查询字符串变量。

【问题讨论】:

    标签: c# asp.net-mvc


    【解决方案1】:

    这取决于您的配置目的是什么。如果您只想在应用程序中使用查询字符串生成链接,那么您可以在生成链接时添加查询字符串。

    假设如下路由配置:

    routes.MapRoute(
                    name: "Publicurl",
                    url: "public-url.html",
                    defaults: new { controller = "Home", action = "Test" }
    );
    

    您可以使用如下查询字符串为此路线生成链接:

    @Html.RouteLink("My Link", "Publicurl", new { strParam = "hi there", querystring  = "addme" })
    

    如果您只是关心从用于处理此请求的控制器中获取的值,您可以将它们添加到控制器的 Action 方法中,它们将自动绑定。确保它们的名称与您在查询字符串中输入的名称相同:

    public class TestController : Controller
    {
        // strParam and querystring will bound automatically, rename as appropriate
        public ActionResult Index(string strParam, string querystring)
        {
            // Do something with the values
    
            return View();
        }
    }
    

    【讨论】:

    • 我知道这些选项在某些情况下可以使用,但在这种情况下,public-url.html 是一个当前有效且公开的 url,尽管不是来自网站任何地方的链接。所以,RouteLink 选项不能很好地工作。另一个选项的问题是,出于遗留原因,我需要将它实际添加为 Request.QueryString 中的查询字符串。
    • 好的,所以您想要一个链接到您的 MVC 项目外部但将位于同一服务器上的页面的路由?
    • 不完全是。我会尽力澄清。用户输入 www.domain/public-url.html。我希望用户被重定向到 www.domain/public-url.html?querystring=value。尽管我不介意,但我不需要用户查看查询字符串。目前,我在 rewriterules.config 文件中进行了设置,并且可以 100% 正常工作。我想知道是否可以在 routeconfig.cs 中或在代码到达控制器之前的某个时间做类似的事情。我正在寻找与 Html.RouteLink 示例中的“不匹配”参数添加实际查询字符串参数的方式相当的东西。
    猜你喜欢
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-13
    相关资源
    最近更新 更多