【问题标题】:why Request.Url includes querystring in it?为什么 Request.Url 在其中包含查询字符串?
【发布时间】:2012-06-03 21:12:44
【问题描述】:

在我的一个页面上,我让用户根据他们从年龄下拉列表中选择的年龄来过滤内容。

这是我的代码。

$('#age').change(function () {
         var ageUrl = "@Request.Url?age=" + $(this).val();

         alert(ageUrl);
         window.location = ageUrl;
     });

这就是问题所在。我在应用页面上。

http://localhost:60627/apps

第一次,我选择了一个年龄并被重定向,没问题。

http://localhost:60627/apps?age=Middle_School

第二次,我再选一个。

http://localhost:60627/apps?age=Middle_School?age=Preschool

在查询字符串中,年龄出现了两次。我尝试了 Request.Url 或 Request.RawUrl,总是包含查询字符串。我应该用什么来只获取没有查询字符串的页面 url。

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3 request


    【解决方案1】:

    我以前没有真正使用过,但它确实有效:

     Request.Url.GetLeftPart(UriPartial.Path)
    

    另一种选择是:

     String.Format("{0}://{1}{2}",Request.Url.Scheme, Request.Url.Authority, Request.Url.LocalPath)
    

    如果你知道你在哪个控制器/动作上(从 ViewContext 的数据),你可以使用 @Url.Action 并指定重载来强制 http 模式,这也会生成一个完整的 url。

    【讨论】:

    • 喜欢使用 URL.Action 的想法,因为这更像是一种约定。
    • 您的代码有效,但还有另一种更简单的方法,我将 Request.Url 替换为 Request.Url.AbsolutePath
    • 我同意 AbsolutePath 有效,但您似乎出于某种原因想要在您的 Url 上使用架构/权限前缀。很高兴你成功了。
    【解决方案2】:

    这不是 Request 的属性,但它可以为您提供解决方案。 https://stackoverflow.com/a/2541083/969829

    【讨论】:

      【解决方案3】:

      你为什么不试试Split字符串方法?

      Request.Url.ToString().Split('?')[0]
      

      【讨论】:

        【解决方案4】:

        您为什么要自己构建 URL?让 MVC 为您完成:

        @Url.Action("Action", "Controller", new { age = "Preschool" })
        

        如果年龄不是路由的一部分,那么它将自动添加到查询字符串中:

        http://localhost:12345/Controller/Action?age=Preschool
        

        【讨论】:

        • 这段代码的问题是他的函数是JavaScript,而你的代码都是服务器端的。除非他要使用 !age 之类的占位符标记!并将令牌替换为您的示例将起作用的文本框中的值。例如: var ageUrl = @Url.Action("Action", "Controller", new { age = "!age!" })".replace('!age!',$(this).val());
        猜你喜欢
        • 2011-03-30
        • 1970-01-01
        • 2011-05-14
        • 2020-05-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-05
        相关资源
        最近更新 更多