www.mysite.com/employee 및 www.mysite.com/employee/ asp.net MVC 라우팅 차이는 JQGrid를 사용하는 동안
-
06-07-2019 - |
문제
프로젝트 중 하나에 ASP.NET MVC를 사용하고 있습니다. 여기에 나는 호출 할 수있는 직원 컨트롤러가 있습니다. www.mysite.com/employee/ URL.
또한 Followng를 사용하여 데이터를 가져 오는 JQGRID를 사용했습니다.
URL : "GetGridData"
동일하게 테스트하는 동안 나는 그것을 발견했습니다
브라우저에서 www.mysite.com/employee/를 입력하면
www.mysite.com/employee/getgriddata
브라우저에 www.mysite.com/employee를 입력하면 전화를받습니다.
www.mysite.com/getgriddata
참고 : 두 번째 호출의 결국 누락 /.
최종 사용자가 브라우저 에이 URL을 입력 할 수있는 가능성이 있으므로이를 수정하는 방법.
해결책
JQGrid에게 웹 서비스 호출을 요청하는 방법을 살펴 보겠습니다. 기본적으로 MVC 라우팅 엔진에 대해 전혀 알지 못하기 때문입니다. 이는 모두 클라이언트 측면입니다.
페이지가있는 경우 1 분 동안 MVC 밖에서 스텝핑합니다.
example.com/page1.aspx
다른 페이지에 대한 상대적 링크가 있습니다.
<a href="page2.aspx">Click here</a>
브라우저는 page1.aspx와 같은 수준에서 page2.aspx를 찾습니다.
example.com/page2.aspx
Page1을 새 폴더로 이동하면 :
example.com/newfolder/page1.aspx
브라우저가 요청합니다
example.com/newfolder/page2.aspx
사용자가 링크를 클릭하면
GetGridData 호출에도 마찬가지입니다. 이는 웹 브라우저에서 사용 가능한 정보를 기반으로 서버로 만들어집니다.
따라서 페이지가 응답하면 다음과 같습니다.
example.com/employee
다음에 대한 상대적인 요청을 요청합니다.
getgriddata
브라우저는 해당 요청을 직원과 같은 수준으로 보냅니다.
example.com/getgridData
라우팅 엔진이 해당 요청에 대한 경로를 찾을 수 없기 때문에 실패합니다.
라우팅 시스템을 통해 getGridData 통화의 URL을 생성하는 것을 살펴 봐야합니다.
url: "/Employee/GetGridData"
추가 할 최종 편집
언급하는 것을 잊어 버렸습니다 UrlHelper 동작 방법 이것을 위해 :
url: <%=Url.Action("GetGridData")%>
이것은 현재 컨트롤러에서 getGridData 메소드의 경로를 생성합니다. 다른 컨트롤러에 액세스하거나 일부 값을 전달 해야하는 경우 도움이되는 과부하가 있습니다.
다른 팁
경로 디버깅을 시도해보십시오.Phil Haack : ASP.NET 라우팅 디버거