![](/img/trans.png)
[英]Why can I run external HTTP calls from a .Net Core 3.1 web app locally, but not when published to Azure Websites?
[英]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 方法。 所以我認為它看到了動作但忽略了它或類似的東西。
這是為您提供的診斷解決方案。
提示:如果還是不能確定文件是否丟失,可以在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.