.NET Core 2.0 MVC 奇数 404 仅在部署到 IIS 时在控制器方法上



我的家庭控制器成功返回index.html

http://localhost/

http://localhost/controller/

但是如果我试图打

http://localhost/controller/method/

即使该方法在 IIS 快递中工作正常,我也得到了一个404

在网上找不到任何有类似问题的人,只有控制器上的方法不适用于一个特定的部署,但控制器本身很好。

我尝试过的事情在IIS部署的许多.Net Core 2.0问题中很常见:

  • 确保在项目设置和 IIS 中打开 Windows 身份验证(我已经打开和关闭它,但都无济于事,我的 Web 应用程序上没有用户身份验证,所以我认为这对我来说并不重要(。

  • 已将我的应用程序池切换为将No managed code用于CLR版本

  • 将应用程序池 ID 更改为LocalSystem

  • 更改我的发布输出文件夹的权限以包含%hostname%IIS_IUSRS

很确定我还尝试了很多其他基本故障排除,有时可以解决问题。 即删除和重新添加应用程序。 再次打开和关闭无济于事。

任何如何解决此问题的建议将非常受欢迎。

我还想指出它昨天工作了,不记得除了发布输出之外更改了任何其他内容以使用Debug而不是Release当然,现在我已经改回了Release但仍然没有运气。

这是一些代码

public class MyController : Controller
{
public IActionResult Index()
{
return View();
}
[HttpPost]
public void Store([FromBody]MyObject obj)
{
Console.WriteLine(Request.Body);
//Some code
}
[HttpGet]
public void Check(string objectUID, string idfv)
{
Console.WriteLine($"ObjectUID: {objectUID}");
Console.WriteLine($"IDFV: {idfv}");
//some other code
}
[HttpGet]
public MyObject Retrieve(string objectUID)
{
Console.Writeline($"ObjectUID: {objectUID}");
//Some Code
}
}

这是我的路由。

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

如果您不确定为什么它不起作用,请尝试属性路由,如文档中的说明 然后你可以这样尝试:

[Route("[controller]/[action]")]
public class MyController : Controller
{
public IActionResult Index()
{
return View();
}
[HttpPost]
public void Store([FromBody]MyObject obj)
{
Console.WriteLine(Request.Body);
//Some code
}
// If you have a parameter from the uri or query-string, you can add it to the Template this way
[HttpGet("{objectUID} ")]
public void Check(string objectUID, string idfv)
{
Console.WriteLine($"ObjectUID: {objectUID}");
Console.WriteLine($"IDFV: {idfv}");
//some other code
}
// Or optional parameter like this 
[HttpGet ("{objectUID?} ")]
public MyObject Retrieve(string objectUID)
{
Console.Writeline($"ObjectUID: {objectUID}");
//Some Code
}
}

由于您收到 404 错误,我怀疑您的网站中缺少 aspnet 核心处理程序。假设你已安装 .NET Core 托管捆绑包, 确保在 web.config 文件中添加了以下处理程序。如果缺少 web.config 文件,请添加新的 web.config。此外,在网站根文件夹中添加一个日志文件夹以进行日志记录。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<!-- To customize the asp.net core module uncomment and edit the following section. 
For more info see https://go.microsoft.com/fwlink/?linkid=838655 -->
<system.webServer>
<handlers>
<remove name="aspNetCore"/>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/>
</handlers>
<aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".logsstdout" />
</system.webServer>

</configuration>

我按照以下步骤在我的机器上运行 ASP.NET 酷睿 2 应用程序:

  1. 应用程序池设置在无托管运行时配置的应用池标识下运行

  2. 将您的 ASP.NET 酷睿 2 网站发布到文件夹。默认情况下,它发布到 bin\Release\PublishOutput

  3. 将 IIS 网站指向已发布文件夹

我在尝试访问我网站的帐户控制器时遇到了类似的问题,即获得 404。所有其他 Razor 页面正常工作。如果我在web.config中将inheritInChildApplications="false"更改为true,控制器将开始工作。

<?xml version="1.0" encoding="utf-8"?> <configuration> <location path="." inheritInChildApplications="true"> ... </configuration>

最新更新