2013-01-04 33 views
0

我想知道什么是正确的方式访问一个ASP.Net Web Api在我的当前上下文中的JavaScript文件的MVC控制器类中的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); 
     }); 

我目前收到的$不用彷徨404错误,并认为它可能有一些做的路由。这篇文章中的'扩展示例':http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-and-action-selection解释了当适当的路由放置时,查询字符串参数被选中,我不太确定路由模板中是否需要一个可选的Id,因为这些示例显示的控制器方法只有重载一个身份证,所以我包括两条路线,都没有工作。此外,控制器类实现ApiController类。

网络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 
       } 
      ); 

我相信,因为我没有收到任何编译或web开发工具的错误一边的错误与路由配置从404通知。任何帮助将不胜感激。

回答

2

URI中的multple查询字符串参数应该由&分开 - 你必须在Id2面前? ...

试试这个在您的javascript:

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

Maggie Ying,谢谢你的纠正我感谢你的快速回复。该编辑工作完美,再次感谢。 – cetmrw791346

1

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

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

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

+0

bendewey,谢谢对于这些信息,只是安装了Glimpse,它似乎是一个有用的故障排除工具和elmah错误日志记录。我以前用过fiddler,这绝对是一个非常有用的调试工具。再次感谢。 – cetmrw791346