【问题标题】:A 404 not found error in ajax Get request for a class library project类库项目的 ajax Get 请求中的 404 not found 错误
【发布时间】:2019-12-29 17:04:17
【问题描述】:

我正在制作一个简单的 类库 项目,我在其中制作了一个 AJAX 在 HTML 文件中获取请求以从服务器获取数据(在 ac# 类中的方法中返回) .

AJAX调用的HTML脚本字段

$( function () {

    $('#btnSend').click(function () {

        $.ajax({

            type: "GET",
            url: "./Employee/Getdata",
            data: {},
            contentType: "application/json; charset=utf-8",
            dataType: "json",

            success: function (response) {

                console.log(response);

            },

            failure: function (jqXHR, textStatus, errorThrown) {
                alert("HTTP Status: " + jqXHR.status + "; Error Text: " + jqXHR.responseText); // Display error message  
            }

        })

    })
});

C#调用类:

using System; 
using System.Collections.Generic; 

public class Employee 
{

    public int ID { get; set; }
    public string Name { get; set; }


    public List<Employee> GetData()
    {
        var empList = new List<Employee>()
        {
            new Employee { ID=1, Name="Hamdi"},
            new Employee { ID=2, Name="Tester"}
        };
        return empList ;
    } 

}

问题是控制台中显示的 404 NOT found 错误告诉我 Url 错误,虽然它在具有相同 url 的 MVC 项目中工作正常,在此类遵循路径的情况:Controllers/HomeController/Employee.cs

我搜索了很多,但所有示例都是 MVCwebforms 项目,这不是我的情况,那么正确的 URL 是什么?

【问题讨论】:

  • 等等,如果您不使用 MVC 或 webforms,您使用的是什么
  • @GabrielLuci 其实我想在没有 MVC 项目层次结构且不支持 .aspx 文件类型的类库项目中使用它。
  • 那么什么在处理 HTTP 请求?
  • @GabrielLuci 这就是重点,如何在类库项目中做到这一点
  • 我认为您必须对父项目做出假设。您将无法创建适用于任何类型项目的课程。但是,例如,如果您假设父项目是 ASP.NET MVC,则可以这样做。你必须选择你会支持的东西。

标签: c# jquery ajax url http-status-code-404


【解决方案1】:

Employee 应该是一个控制器,GetData 应该是一个 IActionResult。除此之外,javascript 中的正确 URL 应该是:

网址:“/Employee/Getdata”

。如果您使用基于属性的路由,控制器中的 url 将是:

[HttpGet(“Employee/Getdata”)]

【讨论】:

  • 我不在 MVC 项目中工作,该项目是一个类库
  • 不,那没用,应该是另一个 url 。正如我所提到的,它适用于 MVC 项目
【解决方案2】:

如果您假设父项目将始终是 ASP.NET MVC 项目,则可以这样做。但是你需要对你的类做一些修改。 here 是对 ASP.NET 如何查找控制器类的一个很好的解释。

简而言之,将类重命名为EmployeeController,将文件重命名为EmployeeController.cs,并使其继承自Controller

public class EmployeeController : Controller

只要父项目配置了默认路由,它应该在库中找到这个控制器,并在向/Employee/GetData发出请求时将请求路由到它

如果要更改路由,可以使用属性路由,但这也是假设主项目启用了属性路由。

[RoutePrefix("Employee")]
public class EmployeeController : Controller
    public int ID { get; set; }
    public string Name { get; set; }

    [HttpGet("Data")]
    public List<Employee> GetData()
    {
        var empList = new List<Employee>()
        {
            new Employee { ID=1, Name="Hamdi"},
            new Employee { ID=2, Name="Tester"}
        };
        return empList ;
    }
}

这应该可以与/Employee/Data 一起使用。

【讨论】:

  • 谢谢,这将是解决问题的一步。当我在 url 中提到文件夹或 classnames.cs 时,我发布了 Url 路径,但它不解析控制器类中的操作。主要问题我看到类库项目中没有路由配置文件来定义url路径,我应该添加一个吗?以及如何让项目识别它(配置)来解析路径?
  • 注意:我的主要项目是一个类库,而不是调用包含控制器的类库的 MVC 项目。类库本身应该解析路径
  • 主项目将始终控制路由。类库不能强制执行特定路由。如果您进行了我建议的更改并且主项目设置了默认路由,那么它将可以通过/Employee/GetData 访问。
  • 我还更新了我的答案,包括使用属性路由来建议不同的路由,但这也取决于启用属性路由的主项目。
猜你喜欢
  • 2015-01-14
  • 2012-08-10
  • 2015-09-05
  • 2013-06-18
  • 2017-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-16
相关资源
最近更新 更多