2014-02-11 5 views
0

다음과 같은 코드가 있습니다.C#에서 RedirectToAction이 비쌉니까?

메모를 만들 예정이지만 CustomerId를 알면 두 개의 URL이 있습니다. 나는 방화범의 성능을 볼 때

public ActionResult CreateByCustomer(int id)           
{ 
    Session["ncAppointmentId"] = 0; 
    Session["ncNoteDate"] = null; 

    SetConsultant(0); 
    return RedirectToAction("Create", "Note", new { id = id }); 
} 

public ActionResult Create(int id = 0) 
{ 
    int _CustomerId = id == 0 ? Convert.ToInt32(Session["CustomerId"]) : id; 
    Session["TemplateIds"] = null; 
    and so on....... 
    ViewBag.CustomerId = _CustomerId; 

는 RedirectToAction 1 초의 지연까지 초래할 수있는 '302 찾을'상태로 GET됩니다. 내가

return Create(0); 

그런 다음 GET이 발생하지 않고 성능이 향상됩니다

에 RedirectToAction 라인을 변경하는 경우

.

하지만 단점이나 내가 놓친 부분에 대한 의견을 찾고 있습니까?

답변

2

결과는 클라이언트에게 새로운 페이지를 요청하도록 지시하므로 클라이언트가 이제 서버에 두 번째 요청을해야하므로 오버 헤드가 자연스럽게 발생합니다. 때로는 이것이 필요합니다 - 때로는 - 예를 들어 - 그렇지 않습니다.

일반적으로 메모 작성과 같은 작업을 수행 한 후 클라이언트를 특정 페이지로 되돌리려면 RedirectToAction을 사용합니다. 메모를 나열하고 새 페이지를 만든 후 페이지를 새로 고치려는 페이지에있는 경우 유용 할 수 있습니다. 결과적으로 페이지가 새로 고쳐지고 사용자의 브라우저 기록에 Create 작업이 나타나지 않습니다.

Create 메서드가 View을 반환하는 경우 직접 호출하는 몇 가지 흥미로운 부작용이있을 수 있습니다. 일반적으로 MVC 코드가이를 처리하지만, 클라이언트의 URL이 후속 요청에서 기대하는 것과 다른 것처럼 이상한 결과를 얻을 수 있습니다. 괜찮 으면 괜찮습니다.

다른 옵션은 CreateByCustomer 작업을 제거하고 과 같은 매개 변수를 사용하여 Create보기를 호출하는 것입니다. 이렇게하면 여러 진입 점이 없어도 다양한 방식으로 호출 할 수 있습니다.클라이언트의 위치는 (쿼리 문자열에서) CreateCreate?customerId=12345 사이의 차이를 반영합니다.


< 의견 >
어떤 스타일 참고 :

  • 당신이 항목을 많이 만드는 대신 그것을 유지하기 위해 클래스를 생성, 많은 세션 데이터의를 저장하는 경우 Session[].

  • jQueryUI를 사용하여보기를 정의하는 대신 노트 용 인 페이지 편집기를 만드는 것이 특히 어렵지는 않습니다. this example을 확인하십시오. 너무 더 우아한 : P

</의견 >

+0

감사 - 당신, 내 생각의 가치 확인. Re : jQueryUI - 간단한 편집에서는 유용하지만 IFrame을 사용하면 프로세스 분리 및 재사용 성이 향상됩니다. –

1

RedirectToAction 메서드는 Found 상태 코드와 Location URL이 클라이언트를 리디렉션 할 위치를 가리키는 HTTP 응답을 반환합니다. 비용은 단순히 GET 요청이며, 비용은 많이 들지 않습니다. 리다이렉트 여부는 개념적으로 의미가 있는지 여부에 따라 결정되어야하며, GET 요청을 덜 받는지 여부에 따라 다릅니다.

그러나 나는 여기의 동기를 완전히 이해하지 못합니다. 리디렉션을 시도하는 이유에 대해 자세히 설명해 준다면 어쩌면 내가 더 합리적인 패턴을 선택하도록 도울 수 있습니다.

일반적으로 HTTP API에 메서드 Create*의 이름을 지정하지 않습니다. 관용적이고 정확한 접두어는 각각 새 자원을 (이름 지정하지만) 추가하거나 자원을 작성/대체 (및 이름 지정) 여부에 따라 Post* 또는 Put*입니다.

0

URL을 "만들기"로 변경하려면 큰 차이가 있습니다. 해당 URL로 표시하고있는 내용을 표시하는 것이 좋으면 리디렉션을 피하십시오. 리디렉션은 이전 URL이 있고 새 URL을 가리키고 싶을 때 유용합니다. 사용자가 페이지를 새로 고침하면 새로운 내용을 저장하지 않으려는 경우에도 유용합니다 (리디렉션 요청 만 새로 고침 게시하다).