I以下のMVCコントローラーを持っている:MVC5コントローラ
私はこれらの二つの方法でアクセスできるようにしたい[RoutePrefix("api/SystemCheck")]
public class SystemCheckController : ApiController
{
[HttpGet]
[Route("")]
[Route("EnvironmentValidate")]
[RequiresPrivilegeMVC((int)PrivilegeType.SystemCheck)]
public IEnumerable<EnvironmentValidation> Get()
{
return FilteredEnvironmentValidate();
}
:
- http://localhost/Perform/API/SystemCheck/EnvironmentValidate
- http://localhost/Perform/API/SystemCheck/
オプション2を試してみると、有効な応答が得られます。私はオプション1を試してみてくださいしかし、私が取得:
{ 「メッセージ」:「いいえHTTPリソースが一致する発見されなかったリクエストURI 『http://localhost/Perform/API/SystemCheck/EnvironmentValidate』。」、 「MessageDetail」:「アクションなしが上認められませんでした。 'EnvironmentValidate'という名前と一致するコントローラ 'SystemCheck' }
メソッド名がGet
となっていますが、ルートが「EnvironmentValidate」と指定しているため、コントローラのアクションが見つかりませんか?
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes();
routes.MapHttpRoute(
name: "DefaultApiGet",
routeTemplate: "api/{controller}/{action}",
defaults: new { action = "Get" },
constraints: new { httpMethod = new HttpMethodConstraint("GET") }
);
私が欠けているものの任意のアイデアを:ここで
は、私は私のRouteConfig.csを設定している方法ですか?あなたはWEBAPIコントローラとルーティングMVC属性を使用しようとしているように見えます
おかげで、
私はMVCのルートに非常に知識がありません。しかし、私が推測しなければならないのは、あなたの最初のオプションはRoute属性を ""で設定したからではなく、 "Get"がRouteConfigのデフォルトとして設定されているからです。また、MVCコントローラをAPIとして使用したい場合は、代わりにWebAPIを使用することをお勧めします(あなたがそれについて知らなかった場合には気をつけてください) –
MVCでルートをマッピングすると、最初の一致が得られます。この場合は、属性ベースのルーティングでなければなりません。 –
MVCコンポーネントとWebApiコンポーネントが混在している可能性があります。 ApiControllerはWebApi構成であり、WebApi属性ルーティングを使用する必要があります。それぞれの名前空間は、まったく同じクラスを定義していますが、相互に作用しません。 https://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2 – Sunshine