ASP.NET Core Action работает от VS, но не от браузера - PullRequest
0 голосов
/ 02 января 2019

Я создаю приложение («Поиск аэропорта» или «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?}");
        });

1 Ответ

0 голосов
/ 02 января 2019

Не уверен, что это решит проблему.Но лично мне нравятся разные контроллеры для вызовов AJAX.Если бы это был я, у меня была бы отдельная папка для контроллеров api, поэтому у вас есть

ApiControllers
- HomeApiController

Контроллеры
- HomeController

И любые вызовы ajaxЯ сделаю в домашнем контроллере, затем вызовет домашний контроллер 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);
    }  
  }

Тогда путь будет базовый url + / api / home / search

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...