私は長い間、Web API2を機能させることを試みてきました。インターネットでたくさんの記事や投稿を読んだことがありますが、今のところ運が悪かったです。
単純なWebAPIメソッドを動作させる必要がありますが、何らかの理由で404メソッドが見つかりません。私は本当に今はわかりません。私にはすべてが大丈夫だと思われるので、どこに問題があるのかわかりません。
属性や設定などのバリエーションをたくさん試しました。私はこのコードで終わりました:
Global.asax
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
GlobalConfiguration.Configure(WebApiConfig.Register);
WebApiConfig.cs
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(x => x.MediaType == "application/xml");
config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType);
ApiController
public class ContactFormController : ApiController
{
[Route("~/api/sendemail")]
[HttpPost()]
public IHttpActionResult SendEmail(ContactFormModel contactForm)
{
return Ok();
}
}
モデル:
public class ContactFormModel
{
public string Name { get; set; }
public string Email { get; set; }
public string Subject { get; set; }
public string Message { get; set; }
}
jQueryコード
var jsonData = { "Name": name.val(), "Email": email.val(), "Subject": subject.val(), "Message": comment.val() };
$.ajax({
url: "api/sendemail",
type: "POST",
data: jsonData,
cache: false,
...
});
ご覧のとおり、MVC 5 + Web API2です。
手伝ってくれてありがとう。とても単純なことで、何も機能していません。
ここのようにglobal.asaxを更新してください:
_protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
}
_
[Route("~/api/sendemail")]
を[Route("/api/sendemail")]
に変更します
私の場合、web.configにURL書き換えモジュールがインストールされていたため、ルーティング属性がWebAPIで機能していませんでした。どういうわけか、グローバルルーティングテンプレートはその場で機能していましたが、各Webメソッドの上のルーティング属性は機能していませんでした。 web.configの<rewrite>
セクション内から<system.webServer>
セクションを削除すると、ルーティング属性が機能し始めました。
私の場合、独自のASP.netプロジェクトをホストするドメイン名のサブフォルダーで公開されていたWeb API2プロジェクトがありました。そのメインアプリケーションのweb.configは、Web API 2プロジェクトのweb.configに継承されたため、ルーティングが妨げられました。問題を解決するには、メインプロジェクトでI web.configの継承を完全に停止しました 。
<location path="." inheritInChildApplications="false">
<system.web>
…
</system.web>
</location>