属性的参数路由号码与404未找到(Attribute routing number of param

2019-10-18 21:21发布

我用AttributeRouting设置特定的路线我的ActionResult。 我没有找到一个404页时,我有这个配置:

[GET("Tender/SubmitBid/{id}/{bidId}")]
public ActionResult SubmitBid(string id, string bidId)
{ 
 ...
 return View(model);
}

@using ("SubmitBid", "Tender", new { id = Model.TenderId, bidId = Model.BidId }, FormMethod.Post, new { enctype = "multipart/form-data" }))
{
 ...    
 <button type="submit">Save</button>
}

// 404 not found
[HttpPost]
public ActionResult SubmitBid(BidViewModel model)
{
 ...
}

我安装了一个网址嗅探器来查看该URL触发找不到404页,我得到这样的:HTTP ... /招标/ SubmitBid / 1/0

它应该工作...但我不得不删除最新的参数到达的ActionResult,我不知道为什么。

谢谢您的帮助,

卡林纳

编辑如果删除了属性[GET( “招标/ SubmitBid / {ID} / {bidId}”)]的页是针对POST请求访问。 但是URL是类似于http ... //招标/ SubmitBid / 1?bidId = 0

Answer 1:

因为他们的存在,您应该不需要查询字符串参数BidViewModel您发布。 POST请求的一点是,你没有查询字符串参数。

我认为你必须使用这种超负荷的的Html.BeginForm方法:

@using (Html.BeginForm("SubmitBid", "Tender", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    @Html.HiddenFor(model => model.Id)
    @Html.HiddenFor(model => model.BidId)

    // Other properties..

    <button type="submit">Save</button>
}

现在它将会发布到http:localhost/Tender/SubmitBid具有的特性BidViewModel作为后值,其中包含IdBidId 。 POST操作的签名保持不变:

[HttpPost]
public ActionResult SubmitBid(BidViewModel model)
{
    string id = model.Id;
    string bidId =  model.bidId;

    // ...
}

这也有可能是AttributeRouting导致此问题。 您可以使用本机ASP.NET MVC路由试试这个? 你可以使用这个特定的路线提交投标:

routes.MapRoute(
    name: "SubmitBid",
    url: "Tender/SubmitBid/{id}/{bidId}/",
    defaults: new 
                { 
                    controller = "Tender", 
                    action = "SubmitBid", 
                    id = UrlParameter.Optional, 
                    bidId = UrlParameter.Optional 
                });


文章来源: Attribute routing number of parameters with 404 not found