0

エンティティフレームワークを使用したwebApiプロジェクトがあります エンティティフレームワークを使用して「エンティティフレームワークを使用してwebApi2コントローラ」を使用して、エンティティコントローラ の1つを追加しましたが、webApiコントローラルーティングが機能しません

要求である:

var baseApi = "/api/members/"; 
    return { 
     getAllMembers: getAllMembers 
    }; 
    function getAllMembers() { 
     return $http({ 
      url: baseApi , 
      method: "GET" 
     }); 
    } 

WEBAPI制御コードである:app_startで

using System; 
using System.Collections.Generic; 
using System.Data; 
using System.Data.Entity; 
using System.Data.Entity.Infrastructure; 
using System.Linq; 
using System.Net; 
using System.Net.Http; 
using System.Web.Http; 
using System.Web.Http.Description; 
using sqs; 

namespace sqs.Controllers 
{ 
    public class membersController : ApiController 
    { 
     private sqsEntities db = new sqsEntities(); 

     // GET: api/members 
     public IQueryable<member> Getmembers() 
     { 
      return db.members; 
     } 

     // GET: api/members/5 
     [ResponseType(typeof(member))] 
     public IHttpActionResult Getmember(long id) 
     { 
      member member = db.members.Find(id); 
      if (member == null) 
      { 
       return NotFound(); 
      } 

      return Ok(member); 
     } 

     // PUT: api/members/5 
     [ResponseType(typeof(void))] 
     public IHttpActionResult Putmember(long id, member member) 
     { 
      if (!ModelState.IsValid) 
      { 
       return BadRequest(ModelState); 
      } 

      if (id != member.AccountNumber) 
      { 
       return BadRequest(); 
      } 

      db.Entry(member).State = EntityState.Modified; 

      try 
      { 
       db.SaveChanges(); 
      } 
      catch (DbUpdateConcurrencyException) 
      { 
       if (!memberExists(id)) 
       { 
        return NotFound(); 
       } 
       else 
       { 
        throw; 
       } 
      } 

      return StatusCode(HttpStatusCode.NoContent); 
     } 

     // POST: api/members 
     [ResponseType(typeof(member))] 
     public IHttpActionResult Postmember(member member) 
     { 
      if (!ModelState.IsValid) 
      { 
       return BadRequest(ModelState); 
      } 

      db.members.Add(member); 

      try 
      { 
       db.SaveChanges(); 
      } 
      catch (DbUpdateException) 
      { 
       if (memberExists(member.AccountNumber)) 
       { 
        return Conflict(); 
       } 
       else 
       { 
        throw; 
       } 
      } 

      return CreatedAtRoute("DefaultApi", new { id = member.AccountNumber }, member); 
     } 

     // DELETE: api/members/5 
     [ResponseType(typeof(member))] 
     public IHttpActionResult Deletemember(long id) 
     { 
      member member = db.members.Find(id); 
      if (member == null) 
      { 
       return NotFound(); 
      } 

      db.members.Remove(member); 
      db.SaveChanges(); 

      return Ok(member); 
     } 

     protected override void Dispose(bool disposing) 
     { 
      if (disposing) 
      { 
       db.Dispose(); 
      } 
      base.Dispose(disposing); 
     } 

     private bool memberExists(long id) 
     { 
      return db.members.Count(e => e.AccountNumber == id) > 0; 
     } 
    } 

} 

WEBAPIの設定は次のとおりです。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web.Http; 

namespace sqs 
{ 
    public static class WebApiConfig 
    { 
     public static void Register(HttpConfiguration config) 
     { 
      // Web API configuration and services 

      // Web API routes 
      config.MapHttpAttributeRoutes(); 

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

なし[RoutePrefix]と[ルート]作業、

は、ウェブAPI2で動作するために必要な設定やコードがありませんか?

ありがとうございます!

答えて

0

あなたGetmemberメソッドのパラメータはid

public IHttpActionResult Getmember(long id) 
     { 
      member member = db.members.Find(id); 
      if (member == null) 
      { 
       return NotFound(); 
      } 

      return Ok(member); 
     } 

ですが、あなたのルートの設定はname

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

もそう、あなたがのために特定のルートを設定することができ

routeTemplate: "api/{controller}/{id}", 

のようなあなたのルートを変更でを使用するすべての方法方法

前属性
[Route("api/getmember/{id}")] 
public IHttpActionResult Getmember(long id) 
+0

は、あなたの答え をありがとうございましたが、私は任意のIDを持っていけない最初の方法に到達したい、意味: // GET:API /メンバーを 公共のIQueryable Getmembers() { db.membersを返します。 } しかし、設定では "name"を "id"に変更します 何も変更されていません! – seyyedmohammad

+0

私は私のquで言及したように。ルートとRoutePrefixは動作しません! 私はあまりにもそれらを試した:D – seyyedmohammad

関連する問題