2017-12-31 66 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のWeb 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}'です。 、 デフォルト: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

置き換え

localhostの

れているあなたのWebサービスを実行しているシステムに割り当てられたプライベートIP/API

すなわちhttp://192.168.8.100

することができますと

あなたのプライベートIPを見つける

タイプipconfig/allとコマンドプロンプトでは:コマンドプロンプトで
タイプのifconfigコマンドは、Windows上にある場合:あなたがMac上であれば、私の質問が言ったの下

関連する問題