2016-04-10 12 views
0

私は単純なAPIを作成し、それを私のhtmlから呼び出そうとしています。私は今日も同様のことをしましたが、私はこれを動作させることはできません。それは単に404エラーを返します。C#を使用したAPI 404エラー

WebApiConfig.cs

namespace WebApplication1 
{ 
    public static class WebApiConfig 
    { 
     public static void Register(HttpConfiguration config) 
     { 
      config.MapHttpAttributeRoutes(); 

      config.Routes.MapHttpRoute(
       name: "DefaultApi", 
       routeTemplate: "api/{controller}/{id}", 
       defaults: new { id = RouteParameter.Optional } 
      ); 
     } 
    } 
} 
:HTML

<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-2.0.3.min.js"></script> 
    <script> 
        var uri = 'api/books'; 
        $(document).ready(function() { 
         $.getJSON(uri) 
          .done(function (data) { 
           $.each(data, function (key, item) { 
            $('<li>', { text: formatItem(item) }).appendTo($('#books')); 
           }); 
          }); 
        }); 

APIコントローラ

using WebApplication1.Models; 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Net; 
using System.Web.Http; 

namespace WebApplication1.Controllers 
{ 

    public class BookController : ApiController 
    { 

     [HttpGet] 
     [Route("api/books")] 
     public IHttpActionResult ShowAllProducts() 
     { 
      var db = new DbSearchQuery(); 
      return Ok(db.LoadBooks()); 
     } 

    } 
} 

EDITから

スクリプト

+0

を追加し、あなたのルートは 'ホスト/ APIのように見えるようです/ api/Book'。あなたの最初のスラッグ 'api'をアクションメソッドのアノテーションで削除してみてください。さて、ブラウザのdevツールでリクエストを確認することができます。 –

+0

LoadBooksが正しいjsonを返すと確信していますか? jQueryのドキュメントによると: 'JSONファイルに構文エラーが含まれている場合、私は同じからこれを引っ張っている概念ソリューションの別の証拠を作成したので、jQueryの1.4の時点では、要求は通常、私はかなり確信してsilently' – Hypnobrew

+0

を失敗しますデータベースはクエリーがまったく同じものでした。私はちょうどこのapiが使用される別のソリューションに同じapiコントローラとjqueryを追加しました。 – Suavocado

答えて

1

relative to rootパスを試してみてください。あなたはあなたのuriにバックスラッシュがありません。

var uri = '/api/books'; 

、あなたのWebApiConfig.Register()方法でconfig.MapHttpAttributeRoutes();を持っていることを確認してください。以下のようuriを変更します。あなたがお使いのブラウザの開発者用ツールのコンソール部に(404のような)ネットワークエラーの詳細を表示することができます

EDIT 1

。ブラウザでF12キーを押すだけで、開発者ツールウィンドウが有効になり、コンソールタブが表示されます。あなたのAjax呼び出しが正しいアドレスに作られていること

using WebApplication1.Models; 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Net; 
using System.Web.Http; 

namespace WebApplication1.Controllers 
{ 
    [RoutePrefix("api/books")] 
    public class BookController : ApiController 
    { 

     [HttpGet] 
     [Route("")] 
     public IHttpActionResult ShowAllProducts() 
     { 
      var db = new DbSearchQuery(); 
      return Ok(db.LoadBooks()); 
     } 

    } 

} 

次にダブルチェック:http://yourhost/api/booksを見ているあなたは、おそらくあなたのAJAX呼び出しは、あなたのコントローラのコードを変更することにより、www.yoursite.com/api/books

+0

いいえ、コンソールには正しいhttp://に行きます。/ api/books – Suavocado

+0

@suavocadoアプリケーションが実行されていることを確認して(ブラウザのURLをチェックしてください)、同じurl内でajaxリクエストを行っていることを確認できます(コルズの問題を除外するため) – rustem

1

スタートとは別の場所をターゲットにいることがわかりますあなたのブラウザコンソール。

[コメント後の編集]

プロジェクトが起動クラスが含まれているかどうかを確認してください。 Owinを使用している場合は、アプリケーションをブートストラップするためにStartup.csファイルを作成する必要があります。基本的な例を以下に見つけることができます:OwinベースのWebアプリケーションを起動する方法について

using Microsoft.Owin; 
using Microsoft.Owin.Security.OAuth; 
using Owin; 
using System; 

[assembly: OwinStartup(typeof(WebApplication1.Startup))] 

namespace WebApplication1 
{ 
    public class Startup 
    { 
     public void Configuration(IAppBuilder app) 
     { 
      var config = new HttpConfiguration(); 
      WebApiConfig.Register(config); 

      app.UseWebApi(config); 
     } 
    } 
} 

詳細をここにWhat is the new Startup.cs file for in Visual Studio 2013 projects?

+0

Ajaxコールは正しいhttp://..../api/booksとされていますが、まだ404を取得しています – Suavocado

+1

Startup.csとWebApiConfig.csコードを追加できますか? –

+1

元の投稿にコードを追加してください –

0

Global.aspx

namespace WebApplication1 
{ 
    public class Global : System.Web.HttpApplication 
    { 

     protected void Application_Start(object sender, EventArgs e) 
     { 
      GlobalConfiguration.Configure(WebApiConfig.Register); 
     } 
} 
関連する問題