以编程方式将HTTP请求从GET重定向到POST

时间:2015-06-04 21:32:30

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

以下是POST控制器操作的方法签名。

    [System.Web.Mvc.HttpPost]
    public ActionResult Find(AgentViewModel agent)

POST方法接受视图模型对象作为输入参数。但是,GET方法自然是空的,如下所示:

    public ActionResult Find()

我们希望能够从两个页面访问POST操作。从一页开始,我们使用表格。表单数据被序列化到视图模型对象中,并且适当地调用该操作。但是,第二个页面包含一个附加id值的超链接作为查询字符串(id是视图模型对象的属性)。

基本上我们尝试以两种不同的方式访问Find POST方法:通过将数据序列化为视图模型对象的表单,以及通过包含查询字符串的超链接。

我的问题有两个:我在控制器Initialize方法上有一个覆盖,它检查RequestContext对象是否存在查询字符串。由于对象尚未被序列化,我希望,如果找到参数,则创建视图模型对象并将其序列化为HTTPRequest。由于请求最初是发送到GET方法的,因此我还想重定向到POST操作。

这个问题有更简单的黑客/解决方法(即使用GET中的重定向添加空参数),但是我想找到一个解决方案,将管道定制为挑战。任何方向/想法都非常感谢。

    protected override void Initialize(RequestContext requestContext)
    {
        base.Initialize(requestContext);
        if (requestContext.RouteData.Values["action"].ToString() == "Find" &&
            requestContext.RouteData.Values.Count > 2)
        {
            if (requestContext.RouteData.Values["id"] != null)
            {
                string agentId = requestContext.RouteData.Values["id"].ToString();
                AgentViewModel model = new AgentViewModel();
                model.AgentId = agentId;

                //Need to find a way to redirect from the GET to the POST method
                //Need to find a way to add the AgentViewModel object to the request

                ActionInvoker.InvokeAction(this.ControllerContext, "Find");
            }
        }
    }

0 个答案:

没有答案