1

を働いていない私は、生成されたエンティティフレームワークのAPIコントローラを持って、私は今それに新しいメソッドを追加しようとしています:ASP.NET Entity FrameworkのAPIコントローラメソッドを追加

[ResponseType(typeof(LCPreview))] 
public IHttpActionResult ValidateEmail(string email) 
{ 
    LCPreview lCPreview = db.Data.Find(5); 
    if (lCPreview == null) 
    { 
     return NotFound(); 
    } 

    return Ok(lCPreview); 
} 

が、私はこれを実行すると、

The request is invalid. The parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Int32' for method 'System.Web.Http.IHttpActionResult GetLCPreview(Int32)' in 'Astoria.Controllers.PreviewLCAPIController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter.

規則ベースのルーティングテーブルをルーティングするには二つの動作を区別することができません経由
public static void Register(HttpConfiguration config) 
{ 
    config.MapHttpAttributeRoutes(); 

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

db.Data.Findコールから返されたオブジェクトをチェックしましたか?これは、idフィールドにnull値を持つ可能性があります。 –

+0

私はブレークポイントを入れました、その新しいメソッドを打つことは全くありません – user979331

+1

ルート競合。それは要求に合った別のルートを打っています。ルート設定の構成方法を示します。 URLが要求されています – Nkosi

答えて

1

とはGetに基づいGetLCPreviewアクションを選択している:私はこのエラーを取得します接頭辞の規則。

あなたのルート設定がすでに属性ルーティングを有効にしているとすれば、これはパラメータの制約を使用してルートを区別するのに役立つことを意味します。

[RoutePrefix("api/PreviewLCAPI")] 
public class PreviewLCAPIController : ApiController { 

    //GET api/PreviewLCAPI/5 <- only when the value is an int will it match. 
    [Route("{id:int}")] 
    [HttpGet] 
    public IHttpActionResult GetLCPreview(int id) { ... } 

    //GET api/PreviewLCAPI/[email protected]/ 
    [Route("{email}"] 
    [HttpGet] 
    [ResponseType(typeof(LCPreview))] 
    public IHttpActionResult ValidateEmail(string email) { ... } 
} 

末尾にスラッシュ(/)なしで入力した場合、ドット(。)電子メールには、あなたにいくつかの問題が発生することに注意してください。フレームワークは、ファイルを探してエラーを出していると思うでしょう。

メールアドレスを送信する場合は、POSTを使用してメールを本文に含めます。

//POST api/PreviewLCAPI 
[Route("")] 
[HttpPost] 
[ResponseType(typeof(LCPreview))] 
public IHttpActionResult ValidateEmail([FromBody] string email) { ... } 

リクエスト本体で送信すると、URLに電子メール形式の問題が発生しないようにします。

関連する問題