2012-07-17 5 views
3

나는 닷넷 서비스에 OpenRasta 프레임 워크를 사용하고 있는데 나는OpenRasta URI 잘못된 방법에 대한지도 및 반환 일관성이 HTTP 상태 코드

public OperationResult Get(int Number) 
{ 
// Do some operation and get an entity 
    return new OperationResult.OK(Single-MyResource); 
} 

public OperationResult GetQ() 
{ 
// Do some operation and get an entity 
    return new OperationResult.OK(List-Of-MyResource); 
} 

내 구성이

다음과 같은 핸들러에 다음과 같이 두 가지 방법이
ResourceSpace.Has.ResourcesOfType<MyResource>() 
      .AtUri("/MyResource/{Id}") 
      .And.AtUri("/MyResource") 
      .HandledBy<MyResourceHandler>() 
      .AsJsonDataContract() 
      .And.AsXmlDataContract() 


ResourceSpace.Has.ResourcesOfType<IList<MyResource>>() 
     .AtUri("/MyResources") 
     .HandledBy<MyResourceHandler>() 
     .AsJsonDataContract() 
     .And.AsXmlDataContract(); 

HttpMethod : GET AcceptHeader : "응용 프로그램/JSON" URI : http://testDomain.com/MyResource/

구간 GET AcceptHeader : "응용 프로그램/JSON" URI : http://testDomain.com/MyResources/

구성을 변경 한 후

ResourceSpace.Has.ResourcesOfType<MyResource>() 
      .AtUri("/MyResource/{Id}") 
      .And.AtUri("/MyResource").Named("MyResource") 
      .HandledBy<MyResourceHandler>() 
      .AsJsonDataContract() 
      .And.AsXmlDataContract() 
에 비켜 요청은 나에게 내가

HttpMethod 아래의 요청에 대해 무엇을 얻을 동일에서는 MyResource의 목록을 제공합니다

[HttpOperation(HttpMethod.GET, ForUriName = "MyResource")] 

OpenRasta 반환 즉 핸들러에 적절한 변경을 415 http 상태 코드.

위와 일치하지 않습니다. OpenRasta 상기와 유사한 구성을위한 내 다른 자원에 대한

403 HTTP 상태 코드

답변

1

첫 번째 경우가 정확한지를 던졌습니다. 둘 사이의 처리기를 공유합니다. 따라서 처리기가 메소드를 선택하기 위해 조사 될 때 매개 변수가있는 후보와없는 매개 변수가 있습니다./MyResource에 가면 핸들러를 찾고 매개 변수가없는 메소드를 찾습니다. 이는 예상되는 동작입니다.

두 번째 구성에는 누락 된 것이 있습니다. 415는 요청 데이터가 OR에 의해 이해되지 않는 경우입니다. GET이므로 처리 할 요청 미디어 유형이 없어야합니다. 이 일은 무슨 일이 일어나고 있는지 확인하기 위해 디버그 로그가 필요합니다. 귀하의 요청에 일부 요청 데이터 및 Content-Type이 포함되지 않았습니까? 난 단지 JSON을 위해 당신에게 정말 비슷한 일을 수행하지만,이 같은 그것을 한 적이

:

+0

예, 내 요청이 모든 데이터 및 Content-Type을 전달하지 않습니다. – sham

+0

Fiddler에서 실행 중 요청에 대한 세부 정보. GET http : // testDomain.com/RestLayer/MyResource 요청 헤더 사용자 에이전트 : 피들러 호스트 : testDomain.com 권한 부여 : 토큰 abcabaabcacbacba 상태 반환 값은 415입니다. – sham

0

OpenRasta의 GET면, 나는 내 마음에 꽤 잘 가지고, 내가 여전히 함께 투쟁 POST입니다 :

ResourceSpace.Has.ResourcesOfType<IList<MyResource>>() 
       .AtUri("/myresource").And 
       .AtUri("/myresource/{id}").HandledBy<ResourceHandler>().AsJsonDataContract(); 



    [HttpOperation(HttpMethod.GET)] 
    public IEnumerable<MyResource> Get(int id = 0) 
    { 
     if (id == 0) 
      return Context.Set<MyResource>().ToList(); 
     else 
      return GetMyResourceMethod(id).ToList(); 
    } 

    private IQueryable<MyResource> GetMyResourceMethod(int id) 
    { 
     var myresource = from resource in Context.Set<MyResource>() 
         where resource.MyResourceId == id 
         select resource; 
     return myresource; 
    } 

Get 메서드에서 기본 매개 변수를 사용하여 매개 변수 사용 여부를 모두 처리 할 수 ​​있습니다. 두 번째 구성에서 ResourceType의 IList가 누락되었다고 생각합니다. 매개 변수가없는 옵션은 목록을 반환하기 때문입니다. 그런 다음 ToList() 메서드를 통해 IEnumerable을 반환하는 것은 바람직하지 않습니다.

이 모두는 'List-Of-MyResource'에서 SQL-to-Linq를 사용한다고 가정하지만 코드의 일부와 수행중인 작업을 볼 수 없습니다. 개인 기능을 무시하지 않고 내가 포함하고 자신의 접근 방식을 취하십시오.