ASP.NET MVC를 사용하여 여러 매개 변수를 사용하여 라우팅
우리 회사는 제품 용 API를 개발 중이며 ASP.NET MVC 사용을 고려하고 있습니다. API를 디자인하는 동안 사용자는 API와 같은 정보를 XML 형식으로 요청하기 위해 아래와 같은 호출을 사용하기로 결정했습니다.
보시다시피 여러 매개 변수가 전달됩니다 (예 : artist
및 api_key
). ASP.NET MVC에서 artist
것 controller
, getImages
행동을하지만, 어떻게 작업에 여러 매개 변수를 전달하는 것?
위의 형식을 사용하여 가능합니까?
매개 변수는 조치 메소드에 매개 변수를 추가하여 MVC에서 직접 지원됩니다. 다음과 같은 조치가 제공됩니다.
public ActionResult GetImages(string artistName, string apiKey)
MVC는 다음과 같은 URL이 주어지면 매개 변수를 자동으로 채 웁니다.
/Artist/GetImages/?artistName=cher&apiKey=XXX
또 다른 특별한 경우는 "id"라는 매개 변수입니다. ID라는 매개 변수는 쿼리 문자열이 아닌 경로에 넣을 수 있습니다.
public ActionResult GetImages(string id, string apiKey)
다음과 같은 URL로 올바르게 채워집니다.
/Artist/GetImages/cher?apiKey=XXX
또한보다 복잡한 시나리오가있는 경우 MVC가 작업을 찾는 데 사용하는 라우팅 규칙을 사용자 지정할 수 있습니다. global.asax 파일에는 사용자 정의 할 수있는 라우팅 규칙이 포함되어 있습니다. 기본적으로 규칙은 다음과 같습니다.
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
같은 URL을 지원하려면
/Artist/GetImages/cher/api-key
다음과 같은 경로를 추가 할 수 있습니다.
routes.MapRoute(
"ArtistImages", // Route name
"{controller}/{action}/{artistName}/{apikey}", // URL with parameters
new { controller = "Home", action = "Index", artistName = "", apikey = "" } // Parameter defaults
);
및 상기 제 1 예와 같은 방법.
MVC 5부터는 속성 라우팅을 사용하여 URL 매개 변수 구성을 컨트롤러로 이동할 수 있습니다.
자세한 내용은 여기에서 확인할 수 있습니다 : http://blogs.msdn.com/b/webdev/archive/2013/10/17/attribute-routing-in-asp-net-mvc-5.aspx
요약:
먼저 속성 라우팅을 활성화합니다
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes();
}
}
그런 다음 속성을 사용하여 매개 변수 및 선택적으로 데이터 유형을 정의 할 수 있습니다.
public class BooksController : Controller
{
// eg: /books
// eg: /books/1430210079
[Route("books/{isbn?}")]
public ActionResult View(string isbn)
쿼리 문자열을 통해 임의의 매개 변수를 전달할 수 있지만 RESTful 방식으로 처리하도록 사용자 지정 경로를 설정할 수도 있습니다.
http://ws.audioscrobbler.com/2.0/?method=artist.getimages&artist=cher&
api_key=b25b959554ed76058ac220b7b2e0a026
그럴 수 있습니다 :
routes.MapRoute(
"ArtistsImages",
"{ws}/artists/{artist}/{action}/{*apikey}",
new { ws = "2.0", controller="artists" artist = "", action="", apikey="" }
);
따라서 누군가 다음 경로를 사용한 경우 :
ws.audioscrobbler.com/2.0/artists/cher/images/b25b959554ed76058ac220b7b2e0a026/
querystring 예제와 같은 위치로 가져갈 것입니다.
위의 예는 예일 뿐이며 사람들이 URL을 '해킹'하지 않도록하기 위해 설정해야하는 비즈니스 규칙 및 제약 조건을 적용하지 않습니다.
참고 URL : https://stackoverflow.com/questions/2246481/routing-with-multiple-parameters-using-asp-net-mvc
'development' 카테고리의 다른 글
(413) 요청 엔티티가 너무 큼 | (0) | 2020.07.01 |
---|---|
기존 git 프로젝트를 GitLab으로 가져 오시겠습니까? (0) | 2020.07.01 |
JavaScript에서 2D 배열 전치 (0) | 2020.07.01 |
NHibernate.MappingException : XYZ에 대한 지속 자 없음 (0) | 2020.07.01 |
패션처럼 트리에서 자식 분기의 출력 (0) | 2020.07.01 |