实施搜索不能在网络API中工作

实施搜索不能在网络API中工作

问题描述:

在我们的移动应用程序的网页API上工作,我们似乎无法让我们的搜索方法工作。 当我们试图从我们得到以下结果对我们的搜索方法实施搜索不能在网络API中工作

<Error> 
<Message> 
No HTTP resource was found that matches the request URI 'https://hippokros-  api.azurewebsites.net/api/Recommends/GetCardRecommendsByFriendId/100000097477513'. 
</Message> 
<MessageDetail> 
No action was found on the controller 'Recommends' that matches the request. 
</MessageDetail> 
</Error> 

API调用我们提琴手得到一个502的HTTP请求,但是当我们调用GetRecommends/1,并通过在id我们得到的成绩。

是控制器代码很短,所以我将只显示它的所有

public class RecommendsController : ApiController 
{ 
    private mtgServiceEntities db = new mtgServiceEntities(); 

    // GET: api/Recommends 
    [HttpGet] 
    public IQueryable<Recommend> GetRecommends() 
    { 
     return db.Recommends; 
    } 

    // GET: api/Recommends/5 
    [ResponseType(typeof(Recommend))] 
    [HttpGet] 
    public IHttpActionResult GetRecommend(int id) 
    { 
     Recommend recommend = db.Recommends.Find(id); 

     if (recommend == null) 
     { 
      return NotFound(); 
     } 

     return Ok(recommend); 
    } 

    // GET: api/Recommends/5 
    [ResponseType(typeof(Recommend))] 
    [HttpGet] 
    public IHttpActionResult GetRecommend(string cardname) 
    { 
     List<Recommend> recommend = db.Recommends.Where(x => x.card_name == cardname).ToList(); 

     if (recommend == null) 
     { 
      return NotFound(); 
     } 

     return Ok(recommend); 
    } 

    //GET: api/Recommend/Search/cardname 
    [ResponseType(typeof(Recommend))] 
    [HttpGet] 
    public IHttpActionResult GetFriendRecommendsByCardName(string cardname) 
    { 
     List<Recommend> recommends = db.Recommends.Where(x => x.card_name == cardname).ToList(); 
     return Ok(recommends); 
    } 

    [ResponseType(typeof(Recommend))] 
    [HttpGet] 
    public IHttpActionResult GetCardRecommendsByFriendId(string friendId) 
    { 
     List<Recommend> recommends = db.Recommends.Where(x => x.facebookId == friendId).ToList(); 
     return Ok(recommends); 
    } 

    // PUT: api/Recommends/5 
    [ResponseType(typeof(void))] 
    public IHttpActionResult PutRecommend(int id, Recommend recommend) 
    { 
     if (!ModelState.IsValid) 
     { 
      return BadRequest(ModelState); 
     } 

     if (id != recommend.ID) 
     { 
      return BadRequest(); 
     } 

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

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

     return StatusCode(HttpStatusCode.NoContent); 
    } 

    // POST: api/Recommends 
    [ResponseType(typeof(Recommend))] 
    public IHttpActionResult PostRecommend(Recommend recommend) 
    { 
     if (!ModelState.IsValid) 
     { 
      return BadRequest(ModelState); 
     } 

     db.Recommends.Add(recommend); 

     try 
     { 
      db.SaveChanges(); 
     } 
     catch (DbUpdateException) 
     { 
      if (RecommendExists(recommend.ID)) 
      { 
       return Conflict(); 
      } 
      else 
      { 
       throw; 
      } 
     } 

     return CreatedAtRoute("DefaultApi", new { id = recommend.ID }, recommend); 
    } 

    // DELETE: api/Recommends/5 
    [ResponseType(typeof(Recommend))] 
    public IHttpActionResult DeleteRecommend(int id) 
    { 
     Recommend recommend = db.Recommends.Find(id); 
     if (recommend == null) 
     { 
      return NotFound(); 
     } 

     db.Recommends.Remove(recommend); 
     db.SaveChanges(); 

     return Ok(recommend); 
    } 

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

    private bool RecommendExists(int id) 
    { 
     return db.Recommends.Count(e => e.ID == id) > 0; 
    } 
} 

和我们在webapiconfig文件路由如下

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

     // Web API configuration and services 
     // Configure Web API to use only bearer token authentication. 
     config.SuppressDefaultHostAuthentication(); 
     config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType)); 

     // Web API routes 
     config.MapHttpAttributeRoutes(); 

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

我们不知道设置或配置我们有错,但基本上它告诉我们,当我们知道我们有正确的URL并且我们使用https来调用它时,没有什么。

请帮忙!

我使用属性路由,因为我可以很容易地看到什么映射到什么:)我推荐阅读this article以更好地理解Web API属性路由。

要匹配你的地址,你可以试试下面的代码:

[RoutePrefix("api/recommends")] 
public class RecommendsController : ApiController 
{ 
    ... 

    Route("GetCardRecommendsByFriendId/{friendId}")] 
    [ResponseType(typeof(Recommend))] 
    [HttpGet] 
    public IHttpActionResult GetCardRecommendsByFriendId(string friendId) 
    { 
     List<Recommend> recommends = db.Recommends.Where(x => x.facebookId == friendId).ToList(); 
     return Ok(recommends); 
    }   
} 
+0

我试过了,我仍然在尝试找回 – 2014-09-10 20:29:06

+0

没有HTTP资源被发现的数据相匹配的,当出现以下错误请求URI'https://hippokros-api.azurewebsites.net/api/Recommends/GetCardRecommendsByFriendId/100000097477513'。 控制器的“推荐”中找不到与“GetCardRecommendsByFriendId”名称匹配的操作。 MessageDetail> 2014-09-10 20:29:39

+0

我在routingconfig中启用了MapMvcAttributeRoutes,并使用了你的代码并尝试点击它,但仍然是旧的错误。有没有我在web.config中缺少的配置会使其工作? – 2014-09-10 20:58:43