2016-10-12 4 views
0

Web APIを使用してmvcプロジェクトにWebサービスを追加しようとしています。 プロジェクトの作成時に、私はMvc + Web Apiを選択しました。Web APIを使用したMvc - コントローラーと一致するタイプが見つからない

しかし、私はAPIコントローラにアクセスすることはできません、私はこのエラーを取得しておいてください。

<Error> 
    <Message> 
     No HTTP resource was found that matches the request URI 'http://www.myapp.app/api/sms'. 
    </Message> 
    <MessageDetail> 
     No type was found that matches the controller named 'sms'. 
    </MessageDetail> 
</Error> 

マイglobal.asax

マイRouteConfig.cs

public static void RegisterRoutes(RouteCollection routes) 
{ 
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

    routes.MapRoute(
     name: "Default", 
     url: "{controller}/{action}/{id}", 
     defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
    ); 
} 

マイWebApiConfig.cs

public static void Register(HttpConfiguration config) 
{ 
    config.MapHttpAttributeRoutes(); 

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

} 

私のAPIコントローラ:

public class SmsController : ApiController 
{ 
    private DbContext db = new DbContext(); 

    // GET: api/Sms 
    public IQueryable<Sms> GetSms() 
    { 
     return db.Sms; 
    } 
    ... 
} 

当然のことながら、私はhttp://www.myapp.app/api/sms経由でAPIにアクセスしようとしています。

私は文字通り私が考えることができるすべてを試し、SOや他のフォーラムに関するすべての関連する質問について読んだが、何も役に立たなかった。 私はそれが通常のlocalhost:portではない私のアプリケーションのURL、に関係しているかなり確信して、私はwww.myapp.appにそれを変更し、それがそのためのポートで80

を実行し、私は見てIISバインドを変更する必要がありました*:80:www.myapp.appのように、このエントリをdrivers/etc/hostsファイルに追加しました:127.0.0.1 www.myapp.app

この時点で私はこれが私の問題を引き起こしていると確信しています。

アイデア?

Application Insights saying there were request attempts

また、それは、次の要求が、このコントローラとアクションにマップされたことを示しています:

GET SMS
GET SMS/

アプリケーションの洞察は私の要求は明らかに正しくマッピングされていると言う

GetSms
GET sms/getsms
GET sms/Index
GET Sms
GET/API/SMS

+0

は、それが動作しないということであれば異なりますあなたのローカルマシンで*** localhost ***? – Win

+0

ローカルマシンで試していますが、プロジェクトURLをlocalhostからmyappに変更しました。新しいプロジェクトでは、URLをそのまま残して、はい、それは動作します。カスタムURLを使用してWeb APIを設定する方法を理解できます。しかしMVCコントローラはうまくマッピングされていますが、WebApiコントローラは... – victor

+0

コンベンションベースのルーティングを使用している場合、 'get GET http://www.myapp.app/api/sms'は – Nkosi

答えて

0

ルーティングを使用する属性

public class SmsController : ApiController 
{ 
    private DbContext db = new DbContext(); 

    // GET: api/Sms 
    [HttpGet] 
    [Route("api/sms")] 
    public IQueryable<Sms> GetSms() 
    { 
     return db.Sms; 
    } 
    ... 
} 

、ポート番号80必要はありませんが、それを追加する場合は80は、その後、URL

http://www.myapp.app:portnumber/api/sms

+0

試してみました – victor

+0

add URLへのポート番号 – Mostafiz

+0

http://www.myapp.app:portnumber/Home/Indexにアクセスしようとしていますか? –

関連する問題