Я создаю приложение («Поиск аэропорта» или «af» для URL) на моем личном домашнем сервере. Когда я запускаю приложение из 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?}");
});