0

VisualStudio2010でMVCRC4Web APIを使用して新しいサイトをセットアップしようとしましたが、機能していないようです。パラメーター値がメソッドに渡されることはありません。

私が知る限り、私はここで説明されているとおりにすべてを実行しました:http ://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-in-aspnet-web-api

ルート構成:

  routes.Clear();
  routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

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

以下は通常のMVCルートです。これを完全に削除して、競合が発生していないかどうかを確認しましたが、違いはありませんでした。

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

テストコントローラー:

  public class TestController : ApiController
  {
        [HttpGet]
        public int Double(int value)
        {
            return value * 2;
        }
  }

URL: http://localhost:1505/api/test/double/4

The parameters dictionary contains a null entry for parameter 'value' of 
non-nullable type 'System.Int32' for method 'Int32 Double(Int32)' in
'MyAppName.Controllers.TestController'. An optional parameter must be a
reference type, a nullable type, or be declared as an optional parameter.

ああ。これは簡単ですよね?しかし、パラメータがマップされる結果にはならないようです。それの一体のために私も試しました

http://localhost:1505/api/test/double?id=4

変わりはない。パラメータにnull値を受け入れるようにすると、たとえば

public int Double(int? value)

実行されますが、value常にnullです。

私は何が間違っているのですか?

4

2 に答える 2

5

ルートにはあります{id}が、アクションにはvalueあり、MVC は「もの」(ルート値、クエリ文字列値など) を名前で照合します。

したがって、名前は整列する必要があります。

ルーティングを次のように変更します。

routes.MapHttpRoute(
      name: "DefaultApi",
      routeTemplate: "api/{controller}/{action}/{value}",
      defaults: new { 
           value= RouteParameter.Optional 
      }
  );

また、次の URL で動作します。http://localhost:1505/api/test/double/4

注: を残す場合value RouteParameter.Optionalは、アクションの署名のタイプを に変更する必要がありますint?

または、アクション メソッドのシグネチャを変更できます。

    [HttpGet]
    public int Double(int id)
    {
        return id * 2;
    }

または、この URL をそのまま使用することもできます。

http://localhost:1505/api/test/double?value=4

于 2012-07-17T13:37:06.157 に答える
0

このケースは、Web API でコントローラーとアクション メソッドの属性[RoutePrefix("")][Route("")]を定義していないときに発生します。これらを追加すると、完全に機能します。

于 2016-07-24T14:42:16.707 に答える