如何使用asp mvc在任何页面上处理get参数

时间:2013-11-25 08:36:11

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

您好我希望从客户要求中获取一些参数, 我需要分析它们并做出一些动作,但我除了向任何页面提出这种请求。 如何使用ASP MVC在一个地方处理它? 我可以使用属性,但我不确定这是一个好的解决方案,我不想改变方法签名。

4 个答案:

答案 0 :(得分:1)

我为这样的任务创建了一些ActionFilter s。例如,一个检查每个POST请求的Anti Forgery令牌,如果找不到或无效,则给出错误。所以我不必检查它并重定向到每个控制器上的适当页面。

答案 1 :(得分:1)

是的,使用Attributes是一个很好的解决方案。您可以使用ASP.Net ActionFilters(它使用Attributes)。他们可以帮助拦截采取行动的呼吁并进一步做出决定。

以下是ASP.Net网站的示例代码 - http://www.asp.net/mvc/tutorials/older-versions/controllers-and-routing/understanding-action-filters-cs

using System;
using System.Diagnostics;
using System.Web.Mvc;
using System.Web.Routing;

namespace MvcApplication1.ActionFilters
{
     public class LogActionFilter : ActionFilterAttribute

     {
          public override void OnActionExecuting(ActionExecutingContext filterContext)
          {
               Log("OnActionExecuting", filterContext.RouteData);       
          }

          public override void OnActionExecuted(ActionExecutedContext filterContext)
          {
               Log("OnActionExecuted", filterContext.RouteData);       
          }

          public override void OnResultExecuting(ResultExecutingContext filterContext)
          {
               Log("OnResultExecuting", filterContext.RouteData);       
          }

          public override void OnResultExecuted(ResultExecutedContext filterContext)
          {
               Log("OnResultExecuted", filterContext.RouteData);       
          }


          private void Log(string methodName, RouteData routeData)
          {
               var controllerName = routeData.Values["controller"];
               var actionName = routeData.Values["action"];
               var message = String.Format("{0} controller:{1} action:{2}", methodName, controllerName, actionName);
               Debug.WriteLine(message, "Action Filter Log");
          }

     }
}

在您的Controller Action方法中。使用LogActionFilter装饰动作或使用Filter装饰整个Controller,在下面的情况下,将在所有Controller的动作中调用Filter。我猜这适合你...

using System.Web.Mvc;
using MvcApplication1.ActionFilters;

namespace MvcApplication1.Controllers
{
     [LogActionFilter]
     public class HomeController : Controller
     {
          public ActionResult Index()
          {
               return View();
          }

          public ActionResult About()
          {

               return View();
          }
     }
}

答案 2 :(得分:1)

您必须使用此方法

string param = HttpContext.Current.Request.QueryString["param"];

答案 3 :(得分:0)

您可以使用Querysting将其添加到签名的操作方法

这是一个例子

public ActionResult YourAction(string param1, string param2)
{
        string _param1= param1;
        string _param2= param2;
        return View();
}

它会接受一个查询... / YourRoute?param1 = value1& param1 = value2

同时也看一看 QueryString MVC