ASP.NET MVC - Extract parameter of an URL

后端 未结 6 1937
轮回少年
轮回少年 2020-12-12 20:26

I\'m trying to extract the parameters of my URL, something like this.

/Administration/Customer/Edit/1

extract: 1

/Adm

相关标签:
6条回答
  • 2020-12-12 20:54

    You can get these parameter list in ControllerContext.RoutValues object as key-value pair.

    You can store it in some variable and you make use of that variable in your logic.

    0 讨论(0)
  • 2020-12-12 20:55

    In order to get the values of your parameters, you can use RouteData.

    More context would be nice. Why do you need to "extract" them in the first place? You should have an Action like:

    public ActionResult Edit(int id, bool allowed) {}
    
    0 讨论(0)
  • 2020-12-12 21:04
    public ActionResult Index(int id,string value)
    

    This function get values form URL After that you can use below function

    Request.RawUrl - Return complete URL of Current page

    RouteData.Values - Return Collection of Values of URL

    Request.Params - Return Name Value Collections

    0 讨论(0)
  • 2020-12-12 21:05

    I'm not familiar with ASP.NET but I guess you could use a split function to split it in an array using the / as delimiter, then grab the last element in the array (usually the array length -1) to get the extract you want.

    Ok this does not seem to work for all the examples.

    What about a regex?

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

    then get that last subexpression (.*), I believe it's $+ in .Net, I'm not sure

    0 讨论(0)
  • 2020-12-12 21:17

    I wrote this method:

        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;
        }
    

    And I call it like this:

    string fooBar = GetUrlParameter(Request, "FooBar");
    if (!string.IsNullOrEmpty(fooBar))
    {
    
    }
    
    0 讨论(0)
  • 2020-12-12 21:18

    Update

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

    Will match all your examples


    It is not entirely clear what you are trying to achieve. MVC passes URL parameters for you through model binding.

    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();
      }
    
    }
    

    Adding a route mapping to your global.asax.cs file before the default will handle the /administration/ part. Or you might want to look into MVC Areas.

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

    If it's the raw URL data you are after then you can use one of the various URL and Request properties available in your controller action

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

    It sounds like Request.Url.PathAndQuery could be what you want.

    If you want access to the raw posted data you can use

    string isAllowed = Request.Params["allowed"];
    string id = RouteData.Values["id"];
    
    0 讨论(0)
提交回复
热议问题