我正在家里的个人服务器上构建一个应用程序(URL的“ Airport Finder”或“ af”)。当我从VS运行应用程序时,它运行良好。但是,当我通过浏览器运行它时,却没有。
控制器有两个动作。第一个提供了最初显示主页时用于构建主页的数据。该动作效果很好。称为剃刀视图的一部分,当您首次访问该网站时,该视图会返回主页。
但是,第二个操作将返回404(未找到)。用户在网站上选择各种条件后,将通过AJAX进行调用。同样,如果您在Visual Studio(2017)中运行网站后进行搜索,则此方法也很好用。如果我直接从浏览器运行该网站,它将返回404(尽管第一个操作返回的所有初始数据都很好)。
我已在IIS中安装了该应用程序(已部署到一个文件夹,并在指向该文件夹的默认网站下创建了一个应用程序)。
URL看起来像这样:
http://localhost/af
但是出现错误时,搜索URL如下所示:
http://localhost/Home/Search
我认为它应该像这样:
http://localhost/af/Home/Search
但是,将其手动输入到浏览器中只会返回另一个404(未找到)。
这是控制器代码:
public class HomeController : Controller
{
public IActionResult Index()
{
return View(Logic.GetGeneralAirportData());
}
[HttpPost]
public JsonResult Search(SearchCriteria sc)
{
SearchResults results = Logic.Search(sc);
return Json(results);
}
}
这是AJAX调用:
$.ajax({
method: "post",
url: "/Home/Search",
dataType: "json",
data: {
...
这是路线:
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
答案 0 :(得分:0)
不确定是否可以解决问题。但是我个人喜欢为AJAX调用使用不同的控制器。如果是我,我会为api控制器创建一个单独的文件夹,这样您就可以
ApiControllers
-HomeApiController
控制器
-HomeController
然后我在home控制器中进行的所有ajax调用都将调用home api控制器,看起来像这样。
[Route("api/Home")]
[ApiController]
public class HomeApiController : ControllerBase
{
// PRIVATE VARIABLES
public HomeApiController(// DEPENDENCIES)
{
// ASSIGN DEPENDENCIES TO PRIVATE VARIABLES
}
[HttpPost("Search")]
public string Search(SearchCriteria sc)
{
SearchResults results = Logic.Search(sc);
return Json(results);
}
}
然后路径将为基本网址+ / api / home / search