ทรัพยากรที่ร้องขอไม่รองรับวิธี HTTP 'GET'


103

เส้นทางของฉันได้รับการกำหนดค่าอย่างถูกต้องและวิธีการของฉันมีแท็กตกแต่ง ฉันยังคงได้รับข้อความ "ทรัพยากรที่ร้องขอไม่รองรับข้อความ" GET "ของวิธี HTTP?

[System.Web.Mvc.AcceptVerbs("GET", "POST")]
[System.Web.Mvc.HttpGet]
public string Auth(string username, string password)
{
  // Décoder les paramètres reçue.
  string decodedUsername = username.DecodeFromBase64();
  string decodedPassword = password.DecodeFromBase64();

  return "value";
}

นี่คือเส้นทางของฉัน:

config.Routes.MapHttpRoute(
    name: "AuthentificateRoute",
    routeTemplate: "api/game/authentificate;{username};{password}",
    defaults: new { controller = "Game",
                    action = "Auth", 
                    username = RouteParameter.Optional, 
                    password = RouteParameter.Optional },
    constraints: new { httpMethod = new HttpMethodConstraint(HttpMethod.Get) }
);

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

คำตอบ:


227

โปรดใช้แอตทริบิวต์จาก System.Web Http namespace บนการดำเนินการ WebAPI ของคุณ:

    [System.Web.Http.AcceptVerbs("GET", "POST")]
    [System.Web.Http.HttpGet]
    public string Auth(string username, string password)
    {...}

เหตุผลที่ว่าทำไมมันไม่ทำงานเป็นเพราะคุณใช้แอตทริบิวต์ที่มาจากMVCSystem.Web.Mvc namespace เรียนในSystem.Web.Httpnamespace มีการWebAPI


11
ไอ้ .. ขอบคุณ! ฉันกำลังจะบ้าฮ่า ๆ เหลือเชื่อว่าคุณจะเสียเวลาไปกับเรื่องเล็ก ๆ แบบนี้ได้อย่างไร ..
Rushino

1
อันที่จริงคำอธิบายว่าเหตุใดจึงเป็นคำตอบที่ถูกต้องจึงจำเป็นอย่างยิ่งที่นี่!
Jaxidian

6
แก้ไขคำตอบพร้อมคำอธิบาย
Maggie Ying

2
ฉันสามารถระบุ [System.Web.Http.AcceptVerbs ("GET", "POST")] และ [System.Web.Http.HttpGet] ใน RouteConfig.cs เพื่อที่ฉันจะได้ไม่ต้องเพิ่มสิ่งนี้ในแต่ละ API
Girish Gupta

8
เหตุใดฉันจึงต้องทำสิ่งนี้ใน 10 apis เดียวของฉันสำหรับโปรเจ็กต์นี้ ฉันสร้าง api ในลักษณะเดียวกับในอีก 9 apis น่าหงุดหงิดแค่ไหน
Dan Beaulieu


3

ในกรณีของฉันลายเซ็นเส้นทางแตกต่างจากพารามิเตอร์วิธีการ ฉันมี id แต่ฉันยอมรับ documentId เป็นพารามิเตอร์ซึ่งทำให้เกิดปัญหา

[Route("Documents/{id}")]   <--- caused the webapi error
[Route("Documents/{documentId}")] <-- solved
public Document Get(string documentId)
{
  ..
}

อวยพรคุณ :) +1
Shai Cohen

2

ฉันพบปัญหาเดียวกัน .. ฉันมีคอนโทรลเลอร์ 4 ตัวที่ใช้งานได้ดีอยู่แล้ว แต่เมื่อฉันเพิ่มตัวนี้กลับ "ทรัพยากรที่ร้องขอไม่รองรับวิธี HTTP" GET " ฉันลองทำทุกอย่างที่นี่และในบทความที่เกี่ยวข้องอื่น ๆ อีกสองสามบทความ แต่ไม่สนใจวิธีแก้ปัญหาดังที่ Dan B. กล่าวถึงในการตอบกลับคำตอบฉันมีคนอื่นที่ทำงานได้ดีอยู่แล้ว

ฉันเดินออกไปสักพักกลับมาและรู้ทันทีว่าเมื่อฉันเพิ่มคอนโทรลเลอร์มันถูกซ้อนอยู่ในคลาส "คอนโทรลเลอร์" ไม่ใช่คลาส "ApiController" ที่คอนโทรลเลอร์อื่น ๆ ของฉันอยู่ภายใต้ ฉันสมมติว่าฉันเลือกตัวเลือกนั่งร้านไม่ถูกต้องในการสร้างไฟล์. cs ใน Visual Studio ดังนั้นฉันจึงรวมเนมสเปซ System.Web.Http เปลี่ยนคลาสพาเรนต์และทุกอย่างทำงานได้โดยไม่มีแอตทริบิวต์เพิ่มเติมหรือการกำหนดเส้นทาง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.