2017-12-31 246 views
0

내 ApiController에 액세스하는 데 문제가 있습니다. 내 API 호출을하면, 다음과 같은 응답을 얻을 :API가 ApiController를 인식하지 못합니다.

{ 
    "Message": "No HTTP resource was found that matches the request URI 'http://localhost/myapp/api/data/abc'.", 
    "MessageDetail": "No action was found on the controller 'Data' that matches the request." 
} 

가 난 일부 데이터를 얻을 수 TopShelf 서비스에 OWIN 웹 API를 만들려고합니다. 나는 이것에 익숙하지 않기 때문에 누군가 내가 나에게 잘못을 설명 할 수 있기를 바랍니다. 내가 볼 수없는 명백한 무언가 인 것 같습니다.

시작 :

var apiHostConfiguration = new Dictionary<string, WebApiHostConfig> {{"webApi", new WebApiHostConfig {Endpoint = "/myapp" ,RequiresOAuth = false}}}; 
// Start OWIN host 

const string baseAddress = "http://localhost"; 
foreach (var conf in apiHostConfiguration) 
{ 
    var app = new WebApiApp(); 
    var opt = new StartOptions(baseAddress + conf.Value.Endpoint); 
    OwinApps.Add(WebApp.Start(opt, app.Configuration)); 
} 

ApiConfig :

class WebApiApp 
{ 
    public void Configuration(IAppBuilder appBuilder) 
    { 
     var config = new HttpConfiguration(); 

     config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{action}/", 
      defaults: new {} 
     ); 
     config.Formatters.Clear(); 
     config.Formatters.Add(new JsonMediaTypeFormatter()); 
     config.EnableCors(); 
     config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always; 
     appBuilder.UseWebApi(config); 
    } 
} 

컨트롤러 :

[EnableCors("*", "*", "*")] 
public class DataController : ApiController 
{ 
    [HttpGet] 
    public string Abc(string text) 
    { 
     var name = GetType().Name; 
     return $"{name} pings back «{text}»"; 
    } 
} 

API 호출 :

http://localhost/myapp/api/data/abc 
+0

경로 템플릿에 선택적 매개 변수가 없습니다. FWIW도 매우 안락한 편입니다. 'routeTemplate : {api/{controller}/{text}} '를 기본으로하고 새로운 라우트 템플릿을 고려해보십시오. , 기본값 : new {text = RouteParameter.Optional}'이 좋습니다. –

+0

'http : // localhost/api/data/abc' –

+0

@AluanHaddad 당신은 내 문제를 해결했습니다. 고마워요 ^^ – Lotok

답변

0

문제는 내가 한 것을 댓글에 @AluanHaddad 같았다 내 행동에서 경로로 string text을 정의하지 마십시오.

코멘트 :

Your route template does not include an optional parameter. 
It is also not very restful FWIW. 
Try 
    routeTemplate: "api/{controller}/{action}/{text?}", 
    defaults: new {text = RouteParameter.Optional} 
but consider that 
    routeTemplate: "api/{controller}/{text?}", 
    defaults: new {text = RouteParameter.Optional} 
is likely preferable. 

당신이 충당 감사드립니다.

-1

교체

로컬 호스트

있는 당신이 당신의 웹 서비스를 실행하는 시스템에 할당 된 개인 IP/API

http://192.168.8.100

당신이 할 수와

비공개 IP를 찾으십시오

유형 ipconfig/all을 명령 프롬프트에서 : 당신은 명령 프롬프트에서
유형 ifconfig를 창문에있는 경우 : 당신이 맥에있는 경우 내 질문에 말했다 이하