2016-08-22 8 views
0

私はSavesController(Web APIコントローラー)にSaveメソッドを持っています。私は郵便配達員とそれをテストしたとき、それはこれを返しました。郵便配達員がなぜ「非静的メソッドはターゲットが必要です」を返すのですか?

{ 
"message": "An error has occurred.", 
"exceptionMessage": "Non-static method requires a target.", 
"exceptionType": "System.Reflection.TargetException", 
"stackTrace": " at System.Web.Http.ApiController. <InvokeActionWithExceptionFilters>d__1.MoveNext()\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()\r\n at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__0.MoveNext()" 
    } 

保存方法はこちらです。 internet.Iを通じて私が検索しました声明

[HttpPost] 
public IHttpActionResult Save(SavesDto dto) 
{ 
    var userId = User.Identity.GetUserId(); 

    if (_context.SavedPosts.Any(a => a.AttendeeId == userId && a.PostId == dto.PostId)) 
    return BadRequest("The save already exists."); 

    var savedPost = new Saves 
    { 
     PostId = dto.PostId, 
     AttendeeId = userId 
    }; 
    _context.SavedPosts.Add(savedPost); 
    _context.SaveChanges(); 

    return Ok(); 
} 

場合は例外がスローされた時に問題がLINQの中にNULL値を使用してから来ていることが分かりました。しかし、Linq文のどのメソッドもtrue/falseを返すだけですが、なぜこの例外がスローされますか?

public class SavesDto 
{ 
    public int PostId { get; set; } 
} 

私は

@foreach(var post in Model) 
{ 
<button 
data-post-id="@post.Id" 
class="btn btn-default btn-sm pull-right .js-toggle-save">Save ?</button 
} 

@section scripts 
{ 
    <script> 
$(document).ready(function() 
{ 
    $(".js-toggle-save").click(function(e) 
    { 
     var button = $(e.target); 
     $.post("/api/saves", { postId: button.attr("data-post-id") }) 
     .done(function() 
     { 
      button.removeClass("btn-default") 
      .addClass("btn-info").text("Saved"); 
     }) 
     .fail(function() 
     { 
      alert("something failed"); 
     }) 
    }); 
} 
); 
</script> 
} 

ここAPIを呼び出しますがnullのラムダ式で変数を使用する場合PostIdとAttendeeIdが

public class Saves 
{ 
    public ApplicationUser User { get; set; } 
    public Post Post { get; set; } 

    [Key] 
    [Column(Order = 1)] 
    public int PostId { get; set; } 

    [Key] 
    [Column(Order = 2)] 
    public string AttendeeId { get; set; } 

} 

答えて

0

NULL可能ではありません。この例外が発生します。 dtoオブジェクトがnullであると思われます。したがって、これを試してみてください:

if (dto != null && _context.SavedPosts.Any(a => a.AttendeeId == userId 
    && a.PostId == dto.PostId)) 
+0

はいdtoオブジェクトがnullです。現在、Null参照例外が次の行にスローされています。なぜ私はスクリプトと感謝のpostIdを渡しているので、dtoオブジェクトがnullである任意のアイデア。 – savvy

+0

コントローラ内のメソッドは、dtoオブジェクトのインスタンスを作成してPostId値を設定していません。あなたが受け入れた場合:int PostID、dtoオブジェクトの代わりに、私はそれが動作すると期待しています。 – Rono

関連する問題