2017-12-28 45 views
0

코드는 작동하지만 바보입니다.RedirectResult에 해시/단편을 추가하면 성가신 코드가 발생합니다.

보기가 사용자에게 반환되면 페이지가 companyId 앵커로 스크롤됩니다.

바보는 다른 경로

내가 /면/회사 ID로 재 지정하려는하지만 나는이 조치가 있음을 ambigiousAction의 예외가 ('용어'없이) 내가 와 다른 공공 조치를 노출해야한다는 것입니다 동일한 경로가 이미 존재합니다 ...

가능한 경우 해당 딜레마를 해결하려면 첫 번째 경로를 변경하지 않으시겠습니까?

[HttpGet("~/terms/{companyId}")] 
public IActionResult Home(string companyId}) 
{ 
    string url = Url.Action(nameof(HomeForRedirect), new { companyId}) + "#conditions"; 
    return new RedirectResult(url); 
} 

[HttpGet("{companyId}")] 
public IActionResult HomeForRedirect(string companyId) 
{ 
    Viewbag.CompanyId = companyId; 
    return View(nameof(Home)); 
} 
+1

해시는 일반적으로 클라이언트 쪽입니다. 그래서 나는 그것이 당신이 거기에 도착하기 위해 클릭하고 HomeController에서 설정되지 않는 링크에 있어야한다고 생각합니다. –

+0

감사합니다. 나는 정말로 그것에 대해 많은 게시물을 발견하고 솔루션이되어야한다고 생각했기 때문에 실제로 작동한다는 점과 해시 서버쪽에 너무 집중한다는 것을 완전히 잊어 버렸습니다. 실제로는 성가신 솔루션 인 :-), 감사합니다! – Pascal

답변

1

난 당신의 코드를 이해하고있어 경우에, 당신은 본질적으로 URL /terms/{companyId}/{controller}/{companyId}#conditions로 리디렉션하려면? 가장 쉬운 경로는 두 경로를 동일한 작업에 첨부하고 조건부에서 리디렉션을 수행하는 것입니다. 예 :

[HttpGet("{companyId}", Order = 1)] 
[HttpGet("~/terms/{companyId}", Order = 2)] 
public IActionResult Home(string companyId) 
{ 
    if (Context.Request.Path.StartsWith("/terms")) 
    { 
     var url = Url.Action(nameof(Home), new { companyId }) + "#conditions"; 
     return Redirect(url); 
    } 

    ViewBag.CompanyId = companyId; 
    return View(); 
} 

더 좋은 방법은 단순히 IIS에서 직접 리디렉션하는 것입니다. ASP.NET 코어 기계에서 요청을 처리하기 위해 발생해야하는 처리량은 그리 중요하지 않으며 리디렉션하기 만하면됩니다. IIS의 URL 다시 쓰기 모듈을 사용하여이 URL에 대한 리디렉션을 설정하면 응용 프로그램이이 URL에 대해 전혀 염려 할 필요가 없습니다. 뷰를 반환하는 정상적인 실행 중 Home 액션 만 있으면 모든 것이 올바르게 동작합니다.

  • 그것은 기본값은 GET 오히려 등 HttpGet보다 구체적인보다 Route 속성을 사용하는 것이 좋습니다 :이 새로운 것처럼

    다른 몇 가지주의 사항이 보이기 때문에.

  • Redirect과 같은 컨트롤러 메서드를 IActionResult (예 : new RedirectResult(...))이 아닌 반환하십시오.
  • 기본값은 작업과 동일한 이름으로보기를 반환하는 것입니다. 따라서 행동이 Home이라고 가정하면 return View(nameof(Home))이 아니라 return View() 일 수 있습니다.
+0

팁 주셔서 감사하지만 위의 내 코멘트를 참조하십시오. 당신은 내가 당신의 대답을 upvote 할만 큼 썼다 또는 나쁜 감정을 가지고 ;-) – Pascal