同じプロジェクトでMVCコントローラーとWebAPIコントローラーを使用しようとしていますが、webapiで404エラーが発生しました。私は2015年にMVCプロジェクトとしてプロジェクトを開始しましたが、webapiコントロールを追加し、デフォルトコードで404エラーが発生しています
何が可能な解決策になる可能性があります。 Stackoverflowでいくつかのソリューションを試しましたが、それらは機能しませんでした。そのうちの1つはリンクの下にあります(そこにある回答を受け入れました) すべてのASP.NET Web APIコントローラーは404を返します
Global.ASAX File Code:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);//WEB API 1st
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
WEBAPI.CONFIG FILE
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
ルート構成ファイルのコード
public class RouteConfig
{
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 }
);
}
}
WebAPI Controller CODE
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using O365_APIs_Start_ASPNET_MVC.Models;
using Microsoft.IdentityModel.Clients.ActiveDirectory;
using O365_APIs_Start_ASPNET_MVC.Helpers;
using System.Threading.Tasks;
namespace O365_APIs_Start_ASPNET_MVC.Controllers
{
public class MAILAPIController : ApiController
{
private MailOperations _mailOperations = new MailOperations();
//async Task<BackOfficeResponse<List<Country>>>
// GET: api/MAILAPI
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
// GET: api/MAILAPI/5
public string Get(int id)
{
return "value";
}
// POST: api/MAILAPI
public void Post([FromBody]string value)
{
}
// PUT: api/MAILAPI/5
public void Put(int id, [FromBody]string value)
{
}
// DELETE: api/MAILAPI/5
public void Delete(int id)
{
}
}
}
また、同じソリューションでNuget Restoreエラーを取得Error Nuget failed to restore PNG
Web APIのルーティングを登録する必要があります[〜#〜] before [〜#〜] MVCのルーティングを登録するため、基本的にApp_Start()
functionは次のようになります。
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);//WEB API 1st
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);//MVC 2nd
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
同じ方法でマッピングされた2つのルートがあります。 delete(id)またはget(id)を削除します。または、ルートマッピングにアクションを追加できます。
このように両方の設定を同じファイルに書き込むことができます
public class RouteConfig
{
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 }
);
}
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
global.aspxファイルでは、このようなコードを編集します-
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(RouteConfig.Register);//WEB API 1st
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);//MVC 2nd
BundleConfig.RegisterBundles(BundleTable.Bundles);
}