得到错误'未找到'映射路由时

时间:2016-05-21 18:36:28

标签: asp.net-web-api routing

当我尝试将路线映射到Api方法调用时,我只能找到“未找到”'在index.html调用函数中。我尝试了多种路由模板组合,但都得到了相同的错误,Not Found。任何人都可以帮忙吗?

我的班级

public class LogonController : ApiController
{
    [HttpPost]
    [ActionName("Logon")]
    public Boolean Logon(string username, string password)
    {

        return true;
    }
 }

我的WebApiConfig

public static void Register(HttpConfiguration config)
{
    // Web API configuration and services

    // Web API routes
    config.MapHttpAttributeRoutes();

    config.Routes.MapHttpRoute(
        name: "Logon",
        routeTemplate: "api/{controller}/{logon}/{username}/{password}",
        defaults: new
            {
                username = RouteParameter.Optional,
                password = RouteParameter.Optional
            }
      );
}

我的Index.html来电者

<div>
    <h2>All Products</h2>
    <ul id="logon" />
</div>
<div>
    <h2>Get User ID</h2>
    <input type="text" id="username" size="5" />
    <input type="text" id="password" size="5" />
    <input type="button" value="Search" onclick="find();" />
</div>

<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-2.0.3.min.js"></script>
<script>
    var uri = 'api/logon';

    function formatItem(item) {
        return 'True';
    }

    function find() {
        var username = $('#username').val();
        var password = $('#password').val();
       // var email = $('#email').val();
       // var firstname = $('#firstname').val();
       // var lastname = $('#lastname').val();
        // $.getJSON(uri + '/' + username + ',' + password + ',' + email + ',' + firstname + ',' + lastname)
        $.getJSON(uri + '/' + username + ',' + password)
            .done(function (data) {
                $('#logon').text(formatItem(data));
            })
            .fail(function (jqXHR, textStatus, err) {
                $('#logon').text('Error: ' + err);
            });
    }
</script>

1 个答案:

答案 0 :(得分:0)

我找到了问题的答案。我正在以错误的方式处理一切。首先,我没有返回'IEnumerable'对象。 接下来,我的路由映射中没有{action}属性。 最后,来自html文件的请求没有传递参数。以下是所做的更改。

我的班级

public class LogonController:ApiController     {         登录[] log = new Logon []         {             新登录{UserName =“Roland”,Email =“mike@optonline.net”,密码=“测试”},             新登录{UserName =“Yo-yo”,Email =“mike@optonline.net”,Password =“test”},             新登录{UserName =“Hammer”,Email =“mike@optonline.net”,密码=“测试”}         };

    [ActionName("LogonApi")]
    public IEnumerable<Logon> GetThisLogon(string username, string password)
    {

        var s = log.FirstOrDefault((p) => p.UserName == username);
        if (s == null)
        {
            return log;
        }
        return log;
    }


   [ActionName("LogonApi")]
    public IEnumerable<Logon> GetLogon()
    {

        return log;
    }

WebApiConfig

       config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
           name: "LogonApi",
           routeTemplate: "api/{controller}/{action}/{username}/{password}",
           defaults: new
           {
               username = RouteParameter.Optional,
               password = RouteParameter.Optional
           }
       );

JavaScript调用

<div>
    <h2>Get User ID</h2>
    <input type="text" id="username" size="5" />
    <input type="text" id="password" size="5" />
    <input type="button" value="Search" onclick="find();" />

</div>

<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-2.0.3.min.js"></script>
<script>
    var uri = 'api/logon/LogonApi';


    function formatItem(item) {
        return 'True';
    }

    function find() {
        var username = $('#username').val();
        var password = $('#password').val();

        $.getJSON(uri + '/', { username: username, password: password}) 
            .done(function (data) {
                $('#logon').text(formatItem(data));
            })
            .fail(function (jqXHR, textStatus, err) {
                $('#logon').text('Error: ' + err);
            });
    }