2017-11-28 1 views
1

저는 C# 및 asp.net 웹 API를 처음 사용합니다.
저는 Microsoft Visual Studio 2015 Community Edition에서 작업하고 있습니다.
며칠 전 나는 오래된 코드를 얻었다. Microsoft.AspNet.WebAPi (Client/Core/WebHost)의 이전 NuGet-Packages를 사용했습니다 (~ v4.2).
그런 다음 새 버전 (~ v5.2.3)을 설치/업데이트했습니다.
웹 API v2의 속성 라우팅을 사용하기 위해이 작업을 수행했습니다.
버전 변경을 수용하기 위해 몇 가지 사항을 변경했습니다. How to Upgrade an ASP.NET Project
링크에서 설명한 대부분의 단계를 수행했습니다. 이 프로젝트에는보기가 없으므로보기 폴더에서 config 파일을 변경하는 단계를 수행하지 않았습니다.
나는 1 개 간단한 메도와 경로 속성을 추가하고 경로가 웹 API 2.0 속성 라우팅 (API v1 코드에서 "업그레이드 됨")

메도

기존 샘플 1에 속성 추가 :

[HttpGet] 
[Route("Hello/world/{num:int}")] 
public IHttpActionResult GetSimple(int num) 
{ 
    return Ok(num); 
} 

샘플 2 :

[HttpGet] 
//[AktionName("Confidential Stuff")] 
[Route("Hello/world/stuff/{Id:int}/{Id2:int}")] 
public HttpResponse Message GetConfidentialStuff(int Id, int Id2) 
{ 
    //do some stuff 
    //return stuff 
} 

프로젝트를 빌드 -> 근무 (쓸데없는 것들에 대한 경고,하지만 작은 문제)
프로젝트 실행 -> Worked
R을 처리하기 위해 사용한 우편 배달부 equest. -> 부분적 일
그것은 한과 작업을 호출하는 '로컬 호스트/안녕하세요/세계/123'및 반환 된 123
그러나
그것은 '로컬 호스트/안녕하세요/세계/재료/1/2 호출 작업 didnt는 . 그것은 반환 : HTTP 자원이 일치 발견 된 요청 URI (ADRESS 링크)

편집

그럼 지금 여기 내 질문의 일부입니다 :
를 * 문제는 무엇입니까?
우편 배달부에서 사용한 URI가 잘못되었습니다. (맞춤법 오류 & 잘못된 매개 변수)
* 어떻게 수정합니까?
올바른 URI와 매개 변수 사용
* 샘플 1은 작동하지만 샘플 2는 작동하지 않는 이유는 무엇입니까?
바보 같기 때문에 & 체크하지 않았다.
* 코드가 엉망인 경우, 왜 컴파일됩니까? 오류가 발생하지 않아야합니까?
는 아직 구체적인 답을 알고하지 않습니다,하지만 코드가 잘못되면 네, 그것은 오류가 발생한다
*이 여전히 ADRESS/자원 그러나 반환을 찾을한다, 샘플 2에 사용 된 코드에 문제가있는 경우 거짓 정보
네,해야

답변

1

문제는 컨벤션 라우팅 샘플 1 초 방법을 일치하는 경우에만 api/{controller}/{id}처럼 하나 추가 PARAM을 지원하고 샘플 2. 기본 규칙 라우팅에 정의 된 경로에 맞게 설정이되지 않는 것입니다 정의.

중 하나를 정의하여 라우팅이

config.Routes.MapHttpRoute(
    name: "DefaultApi", 
    routeTemplate: "api/{controller}/{id}/{id2}", 
    defaults: new { id = RouteParameter.Optional, id2 = RouteParameter.Optional, } 

); 

같은 추가 옵션 라우팅 매개 변수를 허용하도록 WebApiConfig.cs 클래스의 규칙을 편집하거나, 당신이 특성을 활용 :

이 문제를 해결하려면 그 대신에 방귀뱀에있는 소도구.

내가 말했기 때문에

config.MapHttpAttributeRoutes(); 
+0

내 마지막 코멘트를 Delted WebApiConfig.cs 클래스에 라우팅 속성을 사용하려면이

[Route("Hello/world/stuff")] public HttpResponse Message GetConfidentialStuff(int Id, int Id2) { //do some stuff //return stuff } 

같은 방법을 정의하고 Hello/world/stuff?id=1&id2=2

Remeber로 전화 바보 같은 물건. 이제 덜 어리석은 표현으로 다시 시도해보십시오 :). 속성 라우팅을 활용하고자하지만 쿼리 문자열에 정의하지 않고 대신이 예와 같은 경로 여야합니다. [예 - 경로 속성 추가] (https://docs.microsoft.com/en-us/aspnet)/web-api/overview/web-api-routing-and-actions/속성 라우팅 in-web-api-2). 결국이 로컬 호스트/Hello/World/123/Stuff/456/Things와 같은 물건을 갖고 싶습니다. –

+0

@IljamoIlias 늦은 시간 재생을 위해 죄송합니다. 속성 라우팅 제약 조건을 조사했지만 기본 제약 조건 옵션이 설정에서 작동하지 않는 이유에 대한 설명을 찾을 수 없습니다. –

+1

답장을 보내 주셔서 감사합니다. 문제는 단순히 내 어리 석음이었습니다 ... 저는 우편 배달부의 URI가 어떻게 보 였는지 모든 것을 철저히 검사했는지 확인해야했습니다. 적어도 이제는 더 잘 압니다. –