2016-08-22 4 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는 LINQ에서 null 값을 사용에서 오는 문제를 발견을 통해 예외는 내가 검색 한

[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(); 
} 

if 문에서 던져졌다. 그러나 Linq 문에서 모든 메서드는 true/false를 반환합니다. 왜이 예외가 발생합니까?

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

나는 PostId 및 AttendeeId 당신이 null 인 람다 표현식에서 변수를 사용하는 경우이 예외가 발생

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을 허용하지 않습니다 여기

@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를했다. 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