ASP.NET MVC - 提取URL的参数

时间:2011-02-15 13:02:14

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

我正在尝试提取网址的参数,如下所示。

/管理/客户/编辑/ 1

提取: 1

/管理/产品/编辑/ 18?允许=真

提取: 18?allowed = true

/管理/产品/创建?允许= TRUE

提取:?allowed = true

有人可以帮忙吗?谢谢!

6 个答案:

答案 0 :(得分:88)

<强>更新

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 / part。或者你可能想看看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"];

答案 1 :(得分:6)

public ActionResult Index(int id,string value)

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

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

RouteData.Values - 返回网址值

的集合

Request.Params - 返回名称值集合

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

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

更多背景会很好。为什么你需要首先“提取”它们?你应该有一个像:public ActionResult Edit(int id, bool allowed) {}

这样的行动

答案 4 :(得分:0)

我写了这个方法:

    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 :(得分:-5)

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

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

正则表达式怎么样?

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

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