在一个可用的Core 1.1 Web应用程序中,我重命名了一个控制器。控制器URL是从代码片段中的引导程序弹出窗口调用的:
$('.main-select').on('shown.bs.popover', function () {
$('.submit').click(function () {
var fromval = $('.popover #fromvalue').val();
var toval = $('.popover #tovalue').val();
var option = {
url: "/ProductMixController/GetDateData?dStart=" + fromval + "&" + "dEnd=" + toval,
data: JSON.stringify({ dStart: fromval, dEnd: toval }),
method: 'post',
dataType: 'json',
contentType: 'application/json;charset=utf-8'
};
window.location.href = option.url;
原始控制器名称为ProductMixSS并按预期工作。为了遵循MS命名约定,我将其重命名为ProductMixController。结果是一致的404错误。控制器和型号代码保持不变,所有缓存都已清除 - 我知道的,甚至NuGet - 拼写已经过检查和双重检查,配置文件已被检查,端口号已被更改,甚至盒子已被删除重新启动。
我看过一些对这个'bug'的引用,但似乎没有解决我遇到的同样问题。
所以WTF。
答案 0 :(得分:0)
问题在于,根据长期存在的MVC规则和规定,控制器类需要在其名称中使用“Controller”后缀来路由到类似命名的操作。如果您没有通过编码自己的路由来遵循此约定,那么您将遇到同样的问题。 .Net Core在某种程度上放松了这个规则,现在可以根据需要放置模型,控制器,视图文件。但是,似乎将类名称中的“Controller”后缀仍然遵循原始的MVC编译和执行路径。
哇。这是一场为期两天的迷恋运动。