【问题标题】:ASP.NET MVC - Extract parameter of an URLASP.NET MVC - 提取 URL 的参数
【发布时间】:2011-06-27 14:22:48
【问题描述】:

我正在尝试提取我的 URL 的参数,类似这样。

/Administration/Customer/Edit/1

摘录: 1

/Administration/Product/Edit/18?allowed=true

摘录: 18?allowed=true

/Administration/Product/Create?allowed=true

摘录: ?allowed=true

有人可以帮忙吗?谢谢!

【问题讨论】:

  • 你想在哪个上下文中提取参数?从客户端?
  • 我想在服务器端提取
  • 我想知道如何在客户端做到这一点。特别是第一个例子(摘录:1)

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


【解决方案1】:

更新

RouteData.Values["id"] + Request.Url.Query

将匹配您的所有示例


您要达到的目标并不完全清楚。 MVC 通过模型绑定为你传递 URL 参数。

public class CustomerController : Controller {

  public ActionResult Edit(int id) {

    int customerId = id //the id in the URL

    return View();
  }

}


public class ProductController : Controller {

  public ActionResult Edit(int id, bool allowed) { 

    int productId = id; // the id in the URL
    bool isAllowed = allowed  // the ?allowed=true in the URL

    return View();
  }

}

在默认情况下将路由映射添加到 global.asax.cs 文件将处理 /administration/ 部分。或者您可能想研究 MVC 领域。

routes.MapRoute(
  "Admin", // Route name
  "Administration/{controller}/{action}/{id}", // URL with parameters
  new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults

如果它是您所追求的原始 URL 数据,那么您可以使用控制器操作中可用的各种 URL 和请求属性之一

string url = Request.RawUrl;
string query= Request.Url.Query;
string isAllowed= Request.QueryString["allowed"];

听起来Request.Url.PathAndQuery 可能是您想要的。

如果你想访问原始发布的数据,你可以使用

string isAllowed = Request.Params["allowed"];
string id = RouteData.Values["id"];

【讨论】:

    【解决方案2】:
    public ActionResult Index(int id,string value)
    

    此函数从 URL 获取值 之后您可以使用以下功能

    Request.RawUrl - 返回当前页面的完整 URL

    RouteData.Values - 返回 URL 值的集合

    Request.Params - 返回名称值集合

    【讨论】:

    • 使用 Request.QueryString["id"]
    【解决方案3】:

    您可以在 ControllerContext.RoutValues 对象中获取这些参数列表作为键值对。

    您可以将其存储在某个变量中,然后在您的逻辑中使用该变量。

    【讨论】:

      【解决方案4】:

      我写了这个方法:

          private string GetUrlParameter(HttpRequestBase request, string parName)
          {
              string result = string.Empty;
      
              var urlParameters = HttpUtility.ParseQueryString(request.Url.Query);
              if (urlParameters.AllKeys.Contains(parName))
              {
                  result = urlParameters.Get(parName);
              }
      
              return result;
          }
      

      我这样称呼它:

      string fooBar = GetUrlParameter(Request, "FooBar");
      if (!string.IsNullOrEmpty(fooBar))
      {
      
      }
      

      【讨论】:

        【解决方案5】:

        为了获取参数的值,您可以使用RouteData

        更多的上下文会很好。为什么首先需要“提取”它们?你应该有一个像这样的动作:

        public ActionResult Edit(int id, bool allowed) {}
        

        【讨论】:

        • 是的。我做 Url.Action("Edit", "Product", new { id = 10, allowed = true }) 只是想获取参数。我会把它发送到客户端。
        • 我会在服务器端获取它并将参数发送到客户端。
        【解决方案6】:

        我不熟悉 ASP.NET,但我想你可以使用 split 函数将其拆分为一个数组,使用 / 作为分隔符,然后 获取最后一个元素数组(通常是数组长度-1)来获得你想要的提取物。

        好吧,这似乎不适用于所有示例。

        正则表达式呢?

        .*(/|[a-zA-Z]+\?)(.*)
        

        然后得到最后一个子表达式(.*),我相信它是.Net 中的$+,我不确定

        【讨论】:

        • 这在 .NET 和 MVC 中不是必需的,RouteDataRequest.Url 对象包含已为您拆分的所需数据。
        猜你喜欢
        • 2016-04-27
        • 2017-01-13
        • 2011-11-22
        • 2010-09-19
        • 1970-01-01
        • 1970-01-01
        • 2013-09-01
        • 1970-01-01
        • 2018-04-08
        相关资源
        最近更新 更多