เปลี่ยนเส้นทางจากการดำเนินการโพสต์เว็บ api ของเว็บ asp.net


113

ฉันใหม่มากกับ ASP.NET 4.0 Web API เราสามารถเปลี่ยนเส้นทางไปยัง URL อื่นเมื่อสิ้นสุดการดำเนินการ POST ได้หรือไม่เช่น ...Response.Redirect(url)

อันที่จริงฉันอัปโหลดไฟล์จากแอปพลิเคชัน MVC (พูดwww.abcmvc.com) ผ่าน Web API (พูดwww.abcwebapi.com/upload)

นี่uploadคือการดำเนินการโพสต์ ฉันโพสต์รูปแบบหลายส่วนไปยังการดำเนินการโพสต์ของตัวควบคุมการอัปโหลด Web API www.abcmvc.comหลังจากอัปโหลดผมอยากจะเปลี่ยนเส้นทางกลับไป

เป็นไปได้หรือไม่

คำตอบ:


207

แน่นอน:

public HttpResponseMessage Post()
{
    // ... do the job

    // now redirect
    var response = Request.CreateResponse(HttpStatusCode.Moved);
    response.Headers.Location = new Uri("http://www.abcmvc.com");
    return response;
}

9
การใช้เทคนิคการเปลี่ยนเส้นทางนี้ช่วยแก้ปัญหา "วัตถุย้ายไปที่" หน้า WebAPI ที่ฉันได้รับจากเทคนิคการเปลี่ยนเส้นทางอื่น ๆ นอกจากนี้สำหรับการเปลี่ยนเส้นทางชั่วคราวแทนที่จะเป็นแบบถาวรคุณสามารถใช้HttpStatusCode.Redirect(302) หรือ.RedirectMethod(303)
AaronLS

@Darin Dimitrov นี้ได้ผล เหตุใดเมื่อฉันใช้ HttpStatusCode.Redirect แทนไคลเอนต์ของฉันได้รับการตอบสนอง 401
Brett

26

นี่เป็นอีกวิธีหนึ่งที่คุณสามารถเข้าถึงรูทของเว็บไซต์ของคุณได้โดยไม่ต้องเข้ารหัส URL อย่างหนัก:

var response = Request.CreateResponse(HttpStatusCode.Moved);
string fullyQualifiedUrl = Request.RequestUri.GetLeftPart(UriPartial.Authority);
response.Headers.Location = new Uri(fullyQualifiedUrl);

หมายเหตุ: จะใช้ได้ก็ต่อเมื่อทั้งเว็บไซต์ MVC และ WebApi ของคุณอยู่ใน URL เดียวกัน



5

คุณสามารถตรวจสอบสิ่งนี้ได้

[Route("Report/MyReport")]
public IHttpActionResult GetReport()
{

   string url = "https://localhost:44305/Templates/ReportPage.html";

   System.Uri uri = new System.Uri(url);

   return Redirect(uri);
}

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