C# My.net core 3.1 mvc操作在发布到azure应用程序服务时返回404

C# My.net core 3.1 mvc操作在发布到azure应用程序服务时返回404,c#,ajax,asp.net-core,azure-web-app-service,http-status-code-404,C#,Ajax,Asp.net Core,Azure Web App Service,Http Status Code 404,我正在创建一个ASP.NET Core 3.1网站,现在已经向azure应用程序服务发布了测试版本 当我在localhost上运行我的web应用程序时,它工作得很好,但当我运行发布的应用程序时,似乎有些操作不再存在(我知道它们存在,否则将是编译错误),我得到的只是一个404未找到 当我发布内容时,一个令人恼火的操作示例是“登录”,它接收电子邮件和代码,并位于HomeController中: public IActionResult LogIn(string email, string code)

我正在创建一个ASP.NET Core 3.1网站,现在已经向azure应用程序服务发布了测试版本

当我在localhost上运行我的web应用程序时,它工作得很好,但当我运行发布的应用程序时,似乎有些操作不再存在(我知道它们存在,否则将是编译错误),我得到的只是一个404未找到

当我发布内容时,一个令人恼火的操作示例是“登录”,它接收电子邮件和代码,并位于HomeController中:

public IActionResult LogIn(string email, string code)
{
    //Code
    return Json(jObject);
}
[Route("Home/LogIn")]
public IActionResult LogIn(string email, string code)
{
    //Code
    return Json(jObject);
}
此操作通过以下Ajax代码调用:

$.ajax({
    type: "GET",
    url: "/Home/LogIn",
    data: { email: email, code: code },
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function (response) {

    },
    error: function (response) {
        console.log(response);
    }
});
ajax调用返回404未在发布的应用程序上找到。 但我也尝试通过创建“a”标记来做同样的事情:

将ajax代码移动到.cshtml文件,并将url更改为:

url: "@Url.Action("LogIn", "Home")"
但这些解决方案都不能解决我的问题

有没有人认识到这个问题?有人有解决办法吗?我真的很感谢你的帮助

提前谢谢

编辑:

我已经测试过删除“LogIn”操作的所有内容,并将其替换为“return View()”,并为其创建了一个视图,效果很好。“LogIn”操作也可以通过ajax调用找到,但是当我再次添加我想要的代码并发布时,该操作会得到一个404 not found


然后,我尝试将[HttpGet]添加到操作中,结果是不允许使用405方法。因此,我认为它看到了动作,但忽略了动作或类似的动作。

这里有一个诊断解决方案

  • 由于您的项目在localhost上运行良好,因此您可以像下面那样作为文件夹发布,这将为您提供一个像第二张图片那样的文件夹。
  • 在本地计算机上通过IIS测试项目。实际上,如果项目在IIS上运行良好,那么它在Azure上应该运行良好。(路径是您从步骤1创建的文件夹路径)
  • 压缩从步骤1创建的发布文件夹的内容,并将其拖动到应用程序服务的kudu站点,如下所示:
  • 如果以上所有步骤都很好,则表示您的项目很好。检查您的部署方法,并确保在部署时不会丢失任何文件
  • 提示:如果您仍然无法确定文件是否丢失,您应该在bin文件夹下找到方法,如
    myproject.dll
    ,然后反编译文件,检查源代码是否存在。

    已解决! 我解决了这个问题

    我正在查看azure应用程序服务日志,在打电话时发现:

    2020-12-04 19:14:57.864 +00:00 [Information] Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker: Route matched with {action = "LogIn", controller = "Home"}. Executing controller action with signature Microsoft.AspNetCore.Mvc.IActionResult LogIn(System.String, System.String) on controller Project.Controllers.HomeController.
    
    再往下的日志流显示:

    2020-12-04 19:14:57.929 +00:00 [Error] Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware: An unhandled exception has occurred while executing the request.System.Data.SqlClient.SqlException (0x80131904): Cannot open server 'mysrvname' requested by the login. Client with IP address 'appserviceIP' is not allowed to access the server.
    
    所以问题是所有进行数据库调用的操作都“找不到”,但它们实际上得到了sqlexecptions,因为我忘了更新服务器防火墙规则以接受我的应用程序服务IP地址


    真的很抱歉,当我应该得到一些服务器错误时,我没有找到404…

    非常感谢您的回答!我会尝试一下,但我不太确定在创建IIS站点时在“主机名”中放什么。保持“主机名”为空是可以的。祝贺你!很高兴知道你解决了问题。@DorisLv谢谢你!结果我得了404不是很奇怪吗?还是我遗漏了什么?
    2020-12-04 19:14:57.929 +00:00 [Error] Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware: An unhandled exception has occurred while executing the request.System.Data.SqlClient.SqlException (0x80131904): Cannot open server 'mysrvname' requested by the login. Client with IP address 'appserviceIP' is not allowed to access the server.