ASP.NET Core Action可从VS运行,但不能从浏览器运行

时间:2019-01-02 19:25:35

标签: ajax asp.net-core

我正在家里的个人服务器上构建一个应用程序(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?}");
        });

1 个答案:

答案 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

相关问题