【问题标题】:MVC3 form POST fails with 'used to access path ... is not allowed'MVC3 表单 POST 失败,并显示“不允许访问路径 ...”
【发布时间】:2011-12-30 18:38:42
【问题描述】:

我正在尝试在页面上添加通过 Javascript 生成的表单帖子。

我一开始定义了以下路线:

routes.MapRoute(name: "ItemLinks", url: "ItemRequestController/DoItemRequest", defaults: new { controller = "ItemRequest", action = "DoItemRequest" });

但我无法从控制器操作方法中的请求对象中获取表单值。

所以我定义了以下路线:

routes.IgnoreRoute("ItemRequestController/{*pathInfo}");

表格定义为:

@using (Html.BeginForm("DoItemRequest", "ItemRequestController", FormMethod.Post))
{
    @Html.AntiForgeryToken()
    <input type="hidden" name="hid_ItemID" value="" />
    <input type="hidden" name="hid_PositionOnPage" value="" />

在js函数中,我定义了隐藏字段的值(基于点击),然后做:

document.forms[0].submit();

问题是我现在遇到了错误...

用于访问路径的 HTTP 动词 POST '/ItemRequestController/DoItemRequest' 是不允许的。

如何解决这个问题,并在我的控制器操作方法中读取表单 POST 值?

-- 更新--

不敢相信我忘了添加这个...

我确信有一种更优雅的方式来拉取请求变量的...开放给建议。

控制器方法:

[ValidateAntiForgeryToken]
[HttpPost]
public ActionResult DoItemRequest()
{
    int itemListID = 0;
    int pagePositionNumber = 0;
    int.TryParse(Request["itemListID"], out itemListID);
    int.TryParse(Request["pagePositionNumber"], out pagePositionNumber);

【问题讨论】:

  • 你的控制器方法是什么样的?您是否限制了该方法允许的动词?
  • @GarrettVlieger - 忘记发布控制器方法签名。以上更新。

标签: asp.net-mvc asp.net-mvc-3 c#-4.0 asp.net-mvc-routing http-post


【解决方案1】:

确保你的控制器方法被定义为 HttpPost

[HttpPost] // Or [AcceptVerbs(HttpVerbs.Post)]
public ActionMethod DoItemRequest(FormCollection data)
{
}

【讨论】:

    【解决方案2】:
    1. 首先从 Global.asax 中删除您的 ignoreroute 部分

    2. 现在来问题。 MVC 是基于约定的(默认实现)使用这个。

      @using (Html.BeginForm("DoItemRequest", "ItemRequest", FormMethod.Post))
      {
      @Html.AntiForgeryToken()
      <input type="hidden" name="hid_ItemID" value="" />
      <input type="hidden" name="hid_PositionOnPage" value="" />
      

    您只需要指定控制器名称,即 ItemRequest 而不是 ItemRequestController。你的类是 ItemRequestController 但默认情况下是后缀控制器由 MVC 添加。因此,当您在 BeginForm 中使用 ItemRequestController 时,它会搜索未找到的 ItemRequestControllerController 类并引发异常。

    这将解决您的问题。

    【讨论】:

      猜你喜欢
      • 2011-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-04
      • 1970-01-01
      • 2011-12-21
      • 1970-01-01
      相关资源
      最近更新 更多