2012-08-24 33 views
6

Tôi đã gặp sự cố này trong vài ngày (hiện đã được khắc phục và giải pháp được ghi nhận cho bất kỳ ai gặp phải vấn đề này và kéo tóc ra).MVC WebAPI trả lại lỗi 500 không có thông tin

Sau khi vòng mã mới nhất của tôi thay đổi đối với ứng dụng Silverlight của tôi sử dụng MVC4 WebAPI cho dữ liệu, tôi gặp sự cố với một trong các Hành động HttpGet đã trả về IQueryable<oneofmyclasses>. Sử dụng Fiddler2 để xem yêu cầu, tôi có thể thấy tôi đã nhận được lỗi máy chủ nội bộ (500), không có văn bản nội dung để giải thích lý do. Tôi không nhận được lỗi nào trong Hành động của mình.

Kiểm tra 1: Tôi đã xác minh rằng Hành động của tôi thực sự chuyển đến dòng return collection.AsQueryable(); không có lỗi. Đó là

Kiểm tra 2: Tôi xác nhận rằng dữ liệu của tôi được serializing để JSON không có lỗi sử dụng mã này (g là bộ sưu tập của tôi):

var json = new JsonMediaTypeFormatter(); 
      json.SerializerSettings.PreserveReferencesHandling = PreserveReferencesHandling.Objects; 
      ObjectContent<IEnumerable<Model.MenuGroup>> responseContent = new ObjectContent<IEnumerable<Model.MenuGroup>>(g, json); 
      MemoryStream ms = new MemoryStream(); 

      responseContent.CopyToAsync(ms).Wait(); 
      ms.Position = 0; 
      var sr = new StreamReader(ms); 
      var str = sr.ReadToEnd(); 

này cũng làm việc. Tôi cũng đã thử nghiệm nó bằng cách sử dụng định dạng XML mặc dù tôi đã khá chắc chắn nó chỉ bao giờ được sử dụng JSON (không thể quá cẩn thận).

Kiểm tra 3: Đã bật. Net Framework debugging. Lần này khi lỗi xảy ra (trong HttpApplication.cs) VS 2012 đã bắt được nó.

lỗi của tôi:

Mặc dù đã đánh dấu sự sở hữu với những thuộc tính này,

[XmlIgnore] 
[IgnoreDataMember] 
[JsonIgnore] 

Nguồn Net được gọi một nhận được trên một trong những tài sản của tôi. Việc nắm bắt, đó là một tài sản chỉ ghi. Tôi chỉ cần thêm

get { return null; } 

và sự cố đã được giải quyết. Tôi có lẽ nên thực hiện Kiểm tra 3 trước, nhưng kinh nghiệm trước đây của tôi với lỗi này đã cho thấy nó thường là một lỗi cố gắng sắp xếp các đối tượng của tôi, đó là lý do tại sao tôi đã có một chút trầy xước đầu khi họ đã tuần tự hóa đúng và lỗi vẫn tồn tại.

+0

Rất vui khi bạn có thể tìm ra. Bạn nên viết kiểm tra để giải quyết nó như là một câu trả lời. :) –

+0

http://stackoverflow.com/questions/10944938/asp-net-web-api-non-descriptive-500-internal-server-error/34352049#34352049 có thể hữu ích. – GGleGrand

Trả lời

6

Cách tôi giải quyết:

Đã bật .Net Framework debugging. Công cụ -> Tùy chọn -> Gỡ lỗi -> Kiểm tra 'Bật nguồn .NET Framework bước'

Lần này khi lỗi xảy ra (trong HttpApplication.cs) VS 2012 đã bắt được.

Các vấn đề liên quan