簡體   English   中英

我的 .net 核心 3.1 mvc 操作在發布到 azure 應用服務時返回 404

[英]My .net core 3.1 mvc actions return 404 when published to azure app service

我正在創建一個 ASP.NET Core 3.1 站點,現在已經向 azure 應用服務發布了一個測試版本。

當我在 localhost 上運行我的 web 應用程序時,它工作得很好,但是當我運行已發布的應用程序時,似乎某些操作不再存在(我知道它們存在,否則將是編譯錯誤),我得到的只是404 未找到。

當我發布時,一個動作變紅的示例是“LogIn”,它采用 email 和一個代碼,位於 HomeController 中:

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 not found 在已發布的應用程序上。 但我也嘗試通過創建“a”標簽來做同樣的事情:

<a asp-action="LogIn" asp-controller="Home" asp-route-email="test@test.com" asp-route-code="123">Login</a>

但這也返回 404 not found ......

我嘗試過的解決方案:

將 Route 值添加到操作(和控制器):

[Route("Home/LogIn")]
public IActionResult LogIn(string email, string code)
{
    //Code
    return Json(jObject);
}

將 ajax 代碼移至 .cshtml 文件並將 url 更改為:

url: "@Url.Action("LogIn", "Home")"

但是這些解決方案都沒有解決我的問題......

有沒有人認識到這個問題? 有沒有人有解決方案? 我真的很感激一些幫助。

提前致謝!

編輯:

我已經測試刪除“LogIn”操作的所有內容並將其替換為“return View()”並為其創建了一個視圖,它工作正常。 “登錄”操作也可以通過 ajax 調用找到,但是當我再次添加我想要的代碼並發布時,該操作會再次出現 404 未找到...

然后我嘗試將 [HttpGet] 添加到操作中,結果導致不允許使用 405 方法。 所以我認為它看到了動作但忽略了它或類似的東西。

這是為您提供的診斷解決方案。

  1. 由於您的項目在 localhost 上運行良好,您可以發布為如下所示的文件夾,這將為您提供類似於第二張圖片的文件夾。 在此處輸入圖像描述 在此處輸入圖像描述
  2. 在本地計算機上通過 IIS 測試項目。 實際上,如果項目在 IIS 上運行良好,那么在 Azure 上應該運行良好。(路徑是您從步驟 1 創建的文件夾路徑) 在此處輸入圖像描述
  3. 壓縮您在步驟 1 中創建的發布文件夾的內容,並將其拖到應用服務的 kudu 站點,如下所示: 在此處輸入圖像描述
  4. 如果上述所有步驟都正常,則意味着您的項目很好。 檢查您的部署方法,並確保在部署時沒有文件丟失。

提示:如果還是不能確定文件是否丟失,可以在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.

在日志 stream 的更下方顯示了:

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 ......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM