gpt4 book ai didi

c# - 通过URL传入id时Mvc Route 404

转载 作者:太空宇宙 更新时间:2023-11-03 22:37:19 25 4
gpt4 key购买 nike

让我先解释一下我想做什么。我有一个带有下拉列表的表单,其中值的更改会触发标签文本的更改。为此,我附加了一个要触发的 onchange 脚本事件。

 <select onchange="ChangeLabel()" id="ContainerValue" asp-for="Container" class="form-control"/>

标签

<label id="AddressLabel" asp-for="Container" class="control-label"/>

它调用的脚本是

 <script>
function ChangeLabel() {
var val = $('#ContainerValue').val();
$.ajax({
url: '/Rundown/GetLabel/' + val ,
type: "GET",
dataType: "text",
success: function (labelText) {
$("#AddressLabel").html(labelText);
}
});
}
</script>

所以我在我的 Controller 中创建了一个名为 GetLabel 的操作,它带有一个参数 id。

[HttpGet]
// GET: Rundown/GetLabel/5
public string GetLabel(int id)
{
return "x";
}

所以我很确定我使用的是在项目设置时创建的默认路由。据我所知,我没有搞砸这个。

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseBrowserLink();
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
}

app.UseStaticFiles();

app.UseAuthentication();

app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}

现在,当我更改下拉列表中的选择时,更改请求被触发并向 /Rundown/GetLabel/1 发出请求,但它返回 404 错误。出于测试目的,我注意到如果我执行 /Rundown/GetLabel/?id=1 我会点击我的 GetLabel 操作并取回我的 "x" 字符串值。知道为什么我没有看到我的 Action 受到正常打击[controller]/[action]/[id] 路由我希望工作吗?

我能想到的唯一其他相关信息是 Controller 类上方的夹具中的路由。

[Route("[controller]/[action]")]
public class RundownController : Controller

最佳答案

您正在混合属性和基于约定的路由,这会导致冲突。

此处属性路由将优先于基于约定的路由,并且由于您没有找不到操作参数的路由模板。

为 Action 添加路由模板

Route("[controller]/[action]")]
public class RundownController : Controller {

// GET: Rundown/GetLabel/5
[HttpGet("{id}")]
public string GetLabel(int id) {
return "x";
}

}

在 Controller 上有属性路由,在操作上只有 HttpGet 意味着 URL 看起来像

Rundown/GetLabel?id=5

通过包含路由模板参数 [HttpGet("{id}")] 您可以获得所需的行为。

另一种方法是从 Controller 顶部删除 Route("[controller]/[action]")] 并允许启动时的默认路由定义 MapRoute

引用 Routing to controller actions in ASP.NET Core

关于c# - 通过URL传入id时Mvc Route 404,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54364782/

25 4 0
文章推荐: javascript - 我正在开发的 Express/Socket.io 应用程序中的奇怪 JavaScript
文章推荐: javascript - jQuery hide() Then show()