0

我想知道从当前上下文中的 Javascript 文件访问 MVC 控制器类中的 ASP.Net Web Api HTTP GET 方法的正确方法是什么。以下代码段位于 document.ready 主体的函数中。

Javascript:

        var Id1 = $('#EmployeePrimaryId').val();
        var Id2 = $('#EmployeeSecondaryId').val();

        var url = "api/employees/getemployeename?Id1=" + Id1 + "?Id2=" + Id2;


        $.get(url, function (data) {
            $('#EmployeeName').val(data);
        });

我目前在 $.get 收到 404 错误,并相信它可能与路由有关。本文中的“扩展示例”:http ://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-and-action-selection解释了在适当时选择查询字符串参数路由已经到位,我不太确定路由模板中是否需要可选的 Id,因为这些示例显示的控制器方法只有一个 Id 的重载,所以我包含了两个路由,但这两个路由都不起作用。此外,控制器类实现了 ApiController 类。

Web API 控制器方法:

    [System.Web.Http.HttpGet]
    public string GetEmployeeName([FromUri]int Id1, int Id2)
    {
        var data = _context.Employees
            .Where(x => x.EmployeePrimaryId == Id1
                   && x.EmployeeSecondaryId == Id2)
                   .Select(x => x.EmployeeName);

        return data;
    }

RouteConfig 类:

    private static void RegisterApiRoutes(RouteCollection routes)
    {

        routes.MapHttpRoute(
                name: "Employees",
                routeTemplate: "api/{controller}/{action}/",
                defaults: new { controller = "Employees",
                    action = "GetEmployeeName",}
            );

        routes.MapHttpRoute(
                name: "Employees",
                routeTemplate: "api/{controller}/{action}/{id}",
                defaults: new
                {
                    controller = "Employees",
                    action = "GetEmployeeName",
                    id = RouteParameter.Optional
                }
            );

我认为该错误与路由配置有关,因为除了 404 通知之外,我没有收到任何构建或 Web 开发人员工具错误。任何帮助将不胜感激。

4

2 回答 2

2

Uri 中的多个查询字符串参数应该用&-- 你?前面有一个Id2...

在你的 javascript 中试试这个:

var url = "api/employees/getemployeename?Id1=" + Id1 + "&Id2=" + Id2;
于 2013-01-04T02:20:59.033 回答
1

您是否尝试过使用Glimpse调试您的路线?

http://www.hanselman.com/blog/NuGetPackageOfTheWeek5DebuggingASPNETMVCApplicationsWithGlimpse.aspx

此外,Fiddlercurl是发送测试请求的有用工具。

于 2013-01-04T01:55:27.783 回答