【问题标题】:Is it possible to get/post parameter "transparently" to action?是否可以“透明地”获取/发布参数以采取行动?
【发布时间】:2015-04-26 16:46:51
【问题描述】:

是否可以发布/获取未映射到操作参数的参数? 我的意思是做某事

 $.ajax({ url: url, data: {'id'=7,'CorrelationToken'=correlationToken } })

correlationToken 只能从 httpRequest 或“控制器级别”字段获得?例如

class myController: ApiController
{
   Guid CorrelationToken {get; set;}
   public void Action(int id)
   {
        // ...
   }
}

【问题讨论】:

  • 您能否详细说明一下为什么需要这样的东西?
  • 相关标记用于一起引用消息。就我而言:记录消息。按一个字段应用搜索,我将能够同时获取所有相关的“详细”和“错误”消息(从 Web 应用程序和客户端记录)。它在 WPF 和 WCF 应用程序中对我有用。

标签: asp.net-mvc asp.net-web-api asp.net-mvc-5 asp.net-web-api2


【解决方案1】:

一种方法是编写一个自定义控制器工厂, 将读取请求发布的值,然后将值分配给它创建的控制器。

类似这样的东西(未经测试,但你应该明白):

public class My_Controller_Factory : DefaultControllerFactory
{
    public override IController CreateController
    (System.Web.Routing.RequestContext requestContext, string controllerName)
    {
        string controllername = requestContext.RouteData.Values["controller"].ToString();
        Type controllerType = Type.GetType(string.Format(
            "Custom_Controller_Factory.Controllers.{0}",controllername));
        IController controller = Activator.CreateInstance(controllerType) as IController;
        if (controllerName == "MyController")
            ((MyController)IController).CorrelationToken = Request["CorrelationToken"];
        return controller;
    }
    public override void ReleaseController(IController controller)
    {
        IDisposable dispose = controller as IDisposable;
        if (dispose != null)            
        {
            dispose.Dispose();
        }
    }
}     

看这里:

http://www.codeproject.com/Tips/732449/Understanding-and-Extending-Controller-Factory-i

也许更简单的方法是在控制器构造函数中简单地设置值。

public class MyController : Controller
{
    public MyController()
    {
        CorrelationToken = Request["CorrelationToken"];
    }
}

但是,现实情况是您可能不需要这样做。您的 CorrlationToken 可能仅用于日志记录,并且在需要时使用请求本身就很容易。

Log.Debug("CorrlelationToken: {0}", Request["CorrelationToken"]);

【讨论】:

  • 谢谢。我会查一下。我很确定如果 CorrelationToken 不包含在 ApiController 的 Action 参数中,我会收到错误消息。也要去检查一下。由于某些原因,我不想明确地将其包含在界面中。
猜你喜欢
  • 2012-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-05
  • 1970-01-01
  • 2011-09-10
相关资源
最近更新 更多