> 백엔드 개발 > C#.Net 튜토리얼 > WEB API의 ASP.NET 속성 라우팅 예제에 대한 자세한 설명

WEB API의 ASP.NET 속성 라우팅 예제에 대한 자세한 설명

Y2J
풀어 주다: 2017-04-25 15:49:22
원래의
2237명이 탐색했습니다.

다음은 기존 MVC 라우팅입니다

rree

다음과 유사한 효과의 라우팅을 구현하려면 기존 컨벤션 라우팅을 사용하는 것이 더 번거롭습니다.

 config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{id}",
        defaults: new { id = RouteParameter.Optional },
      );
로그인 후 복사

속성 라우팅을 사용하면 더 간단합니다.

새 WEB API 프로젝트를 생성하려면 App_Start 디렉터리에서 WebApiConfig.cs 파일을 열고 다음 코드를 추가하여 속성 라우팅 구성을 활성화하세요.

order/Miles/三只松鼠干果/2袋
order/2017/1/13
로그인 후 복사

속성 라우팅은 다음과 같이 규칙 라우팅과 혼합될 수도 있습니다.

 config.MapHttpAttributeRoutes();
로그인 후 복사

다음과 같이 속성 라우팅을 사용하려면 메서드에 속성을 표시합니다.

 public static void Register(HttpConfiguration config)
    {
      // Web API 配置和服务

      // Web API 路由
      config.MapHttpAttributeRoutes();

      config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{id}",
        defaults: new { id = RouteParameter.Optional },
        constraints: new { id=@"\d+"}
      );
    }
로그인 후 복사

테스트 결과 (URL은 인코딩됩니다. 그렇지 않으면 400 오류가 보고됩니다.)


일반적으로 동일한 컨트롤러의 모든 경로는 동일한 접두사

 [Route("order/{UserNickName}/{ProductName}/{count}")]
로그인 후 복사
로 시작됩니다.

분명히 더 귀찮은 일입니다. 따라서 [RoutePrefix] 속성을 사용하여 공개 접두사

테스트 결과

[RoutePrefix가 ​​used ], 일부 특수 API의 경우 물결선을 사용하여 다음과 같이 라우팅 접두사를 다시 작성할 수 있습니다.

테스트 결과(동일 클래스 아래)

라우팅 접두사에는 다음과 같은 매개변수도 포함될 수 있습니다.

테스트 결과


다음과 같이 경로에 매개변수 제약 조건을 추가할 수 있습니다

테스트 결과

매개변수가 Int 유형이 아니면 경로가 일치하지 않습니다.

다음은 지원되는 몇 가지 제약 조건입니다

여러 개를 사용할 수 있습니다 제약 조건이 있지만 콜론을 사용하여

  [Route("api/books")]
  [Route("api/books/{id:int}")]
  [Route("api/books")]
로그인 후 복사

결과

범위 내에 없으면 일치하지 않습니다

사용자 정의 라우팅 제약 조건은 IHttpRouteConstraint 인터페이스를 구현해야 합니다. 자세한 내용은 공식

[Route("users/{id:int:length(1,3)}")]
public User GetUserById(int id) { ... }
로그인 후 복사

Register Constraints

public class NonZeroConstraint : IHttpRouteConstraint
{
  public bool Match(HttpRequestMessage request, IHttpRoute route, string parameterName, 
    IDictionary<string, object> values, HttpRouteDirection routeDirection)
  {
    object value;
    if (values.TryGetValue(parameterName, out value) && value != null)
    {
      long longValue;
      if (value is long)
      {
        longValue = (long)value;
        return longValue != 0;
      }

      string valueString = Convert.ToString(value, CultureInfo.InvariantCulture);
      if (Int64.TryParse(valueString, NumberStyles.Integer, 
        CultureInfo.InvariantCulture, out longValue))
      {
        return longValue != 0;
      }
    }
    return false;
  }
}
로그인 후 복사

Use Constraints

public static class WebApiConfig
{
  public static void Register(HttpConfiguration config)
  {
    var constraintResolver = new DefaultInlineConstraintResolver();
    constraintResolver.ConstraintMap.Add("nonzero", typeof(NonZeroConstraint));

    config.MapHttpAttributeRoutes(constraintResolver);
  }
}
로그인 후 복사

를 확인하세요. URI 매개변수 및 기본값

물음표를 추가하여 경로 매개변수를 선택적 URI 매개변수로 만들 수 있습니다. 경로 매개변수가 선택사항인 경우 메소드 매개변수에 대한 기본값을 정의해야 합니다.

[Route("{id:nonzero}")]
public HttpResponseMessage GetNonZero(int id) { ... }
로그인 후 복사

또는 라우팅 템플릿에서 기본값

public class BooksController : ApiController
{
  [Route("api/books/locale/{lcid:int?}")]
  public IEnumerable<Book> GetBooksByLocale(int lcid = 1033) { ... }
}
로그인 후 복사
를 정의하세요.

위 내용은 WEB API의 ASP.NET 속성 라우팅 예제에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿