2016-03-16 2 views
0

Я тестировал свой WebAPI2 (DELETE) в Fiddler, и он работает нормально, но в моем коде была ошибка метода, который не разрешен.WebAPI2: [DELETE] Метод не разрешен в CODE, но в Fiddler он работает

Это мой код:

public async Task<bool> deleteUser(int id) 
    { 
     string URI = "http://api.danubeco.com/api/userapps"; 

     using (var client = new HttpClient()) 
     { 
      var response = await client.DeleteAsync(String.Format("{0}/{1}", URI, id)); 

      var myobject = await response.Content.ReadAsStringAsync(); 

      return Convert.ToBoolean(myobject); 
     }    
    } 

// DELETE: api/userapps/5   
    [ResponseType(typeof(userapp))] 
    public IHttpActionResult Deleteuserapp(int id) 
    { 
     userapp userapp = db.userapps.Find(id); 
     if (userapp == null) 
     { 
      return NotFound(); 
     } 

     db.userapps.Remove(userapp); 
     db.SaveChanges(); 

     return Ok(userapp); 
    } 
+0

Вы захватили запрос, созданный этим кодом, и сравните его с запросом, созданным в скрипаче? Уверен, что есть что-то другое .. :) – CodingGorilla

+0

@CodingGorilla in Fiddler i успешно удаляет пользователя с использованием того же метода, но в коде его ответа метод не разрешен. –

+0

Я так понимаю, но вы посмотрели на заголовки запросов, я подозреваю, что вам не хватает заголовка, который он хочет. – CodingGorilla

ответ

0

Попробуйте добавить что-то вроде этого:

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

Конечно, вы должны заменить «YourController с именем вашего класса контроллера, и вам может потребоваться настроить routeTemplate (предполагается, что вы назовете YourURL/api/YourController.

+0

все тот же .. –

+0

Единственное другое место, где я знаю, где указаны допустимые HTTP-глаголы, находится в Web.config в system.WebServer/handlers, где он определяет, какие ExtensionlessUrlHandler (ы) использовать. Но они должны были быть настроены, когда вы создали свой проект WebApi. – Kevin

0

Я действительно не знаю, является ли это хорошей практикой, но я изменил код, подобный этому.

// DELETE: api/userapps/5 
    [HttpGet] 
    [Route("api/userapps/deluser/{id}")] 
    [ActionName("deluser")] 
    [ResponseType(typeof(bool))] 
    public bool Deleteuserapp(int id) 
    { 
     userapp userapp = db.userapps.Find(id); 
     if (userapp == null) 
     { 
      return false; 
     } 

     db.userapps.Remove(userapp); 
     db.SaveChanges(); 

     return true; 
    } 

var response = await client.GetAsync(String.Format("{0}/{1}", URI, 

и использовали GetAsync, а не DeleteAsync.

 Смежные вопросы

  • Нет связанных вопросов^_^