2013-10-11 26 views
18

Tôi có một vấn đề trong MVC.Tên loại hoặc không gian tên 'HttpGet' không thể tìm thấy khi thêm không gian tên 'System.Web.Http'

Hiện tại tôi đang làm việc trong MVC và phiên bản là MVC4. Và tôi có 2 ActionResult Method, xem dưới đây

[HttpGet] 
public ActionResult About() 
     { 
      ViewBag.Message = "Your app description page."; 

      return View(); 
     } 

[HttpPost] 
public ActionResult About(ModelName ccc) 
     { 
      ViewBag.Message = "Your app description page."; 

      return View(); 
     } 

Chúng ta cần không gian tên using System.Web.Mvc; cho [HttpPost][HttpGet] thuộc tính. Vì vậy, tôi đã thêm không gian tên using System.Web.Mvc; trong bộ điều khiển của mình. Nhưng tôi cần phải thêm một không gian tên khác using System.Web.Http; để xử lý lỗi httpsresponseexpection trong bộ điều khiển của tôi. Tôi đã thêm vào không gian tên. Tại thời điểm này System.Web.Mvc; không hoạt động.

I got this error: The type or namespace name 'HttpGet' could not be found . Why ? anything relation between System.Web.Mvc and System.Web.Http for HttpGet ?

+0

Có lẽ vấn đề của bạn là bằng cách nào đó liên quan đến điều này: http://stackoverflow.com/questions/10939239/visual-studio-2012-rc -could-not-load-type-system-web-http-routeparameter – jAC

+0

Được rồi! Nhưng họ có vấn đề dll, Nhưng tôi không có vấn đề dll, tất cả là làm việc tốt, Nhưng nếu tôi thêm System.Web.Http Namespace thì thuộc tính HttpGet không hoạt động! –

+0

Xin vui lòng một lần nữa nhìn thấy câu hỏi của tôi !! –

Trả lời

33

Lý do bạn đang nhận được ngoại lệ này là vì có 2 HttpGetAttribute lớp khác nhau trong 2 gian tên khác nhau:

Đầu tiên được sử dụng trong ASP Bộ điều khiển .NET MVC và bộ điều khiển thứ hai được sử dụng trong bộ điều khiển ASP.NET Web API.

Khi bạn nhập không gian tên thứ hai, trình biên dịch không còn có thể phân biệt đối tượng nào trong số 2 lớp mà bạn đang tham chiếu vì 2 không gian tên nằm trong phạm vi.

Về cơ bản Microsoft sao chép tất cả các lớp đã tồn tại trong ASP.NET MVC cho API Web nhưng đặt chúng trong không gian tên khác nhau. Về cơ bản bạn không nên trộn những không gian tên đó.

But i need to add another one Namespace using System.Web.Http; for httpsresponseexpection error handling in my controller

Tại sao bạn cần sử dụng điều này trong bộ điều khiển ASP.NET MVC? Thông thường đó là điều bạn nên làm trong bộ điều khiển Web API.

Nhưng nếu vì một lý do bạn cần phải trộn 2 bạn sẽ phải xác định rõ ràng mà thuộc tính bạn cần phải sử dụng bằng cách hoàn toàn đủ điều kiện nó:

[System.Web.Mvc.HttpGet] 
public ActionResult About() 
{ 
    ViewBag.Message = "Your app description page."; 
    return View(); 
} 
+1

cảm ơn giải pháp tốt đẹp. nó cũng giải quyết được vấn đề của tôi. phiếu bầu của tôi +1 – imdadhusen

+0

Tôi có thể biết rằng bạn đã xóa tham chiếu MVC hoặc bạn đã sử dụng cả hai thiết bị định tuyến với đường dẫn? – gayan1991

+0

đôi khi tôi muốn thay đổi công việc của mình hoặc giết bản thân mình hoặc một cái gì đó tương tự như các loại công cụ để hiển thị phản đối của tôi để MICROSOFT. bất kỳ cách nào .. cảm ơn người đàn ông. – Setmax

0

Tôi chạy vào vấn đề này trên OS X sử dụng .NET Cốt lõi. Tôi đã thiếu mục nhập cho Microsoft.AspNetCore.Mvc trong số project.json của mình.

Trước:

{ 
    "dependencies": { 
     "Microsoft.NETCore.App": { 
      "version": "1.0.0", 
      "type": "platform" 
     }, 
     ..., 
     "Microsoft.Extensions.Configuration.CommandLine": "1.0.0" 
     }, 
... 
} 

Sau:

{ 
    "dependencies": { 
     "Microsoft.NETCore.App": { 
      "version": "1.0.0", 
      "type": "platform" 
     }, 
     ..., 
     "Microsoft.AspNetCore.Mvc": "1.0.0", 
     "Microsoft.Extensions.Configuration.CommandLine": "1.0.0" 
     }, 
... 
} 
1

Đối với hồ sơ, tôi đã có một vấn đề tương tự trong một thư viện lớp học với một tham chiếu đến MVC. Tôi đã cài đặt một gói nuget trong thư viện lớp mà bản thân nó có một sự phụ thuộc vào MVC (lưu ý: gói mới là: RazorGenerator.Mvc). Trước đây, thư viện lớp dựa vào một tham chiếu Sytem.Web.Mvc.dll được thêm vào bằng cách sử dụng hộp thoại 'Thêm tham chiếu' thay vì trên một thư viện được cài đặt thông qua gói "gói Microsoft.AspNet.Mvc".

Nuget chọn phiên bản MVC thấp nhất có thể đáp ứng các yêu cầu phụ thuộc của gói mới.Điều đó có nghĩa là tham chiếu trước đó (tới MVC 5) đã được thay thế bằng tham chiếu phiên bản thấp hơn (tới MVC 3).

Nâng cấp phiên bản MVC trong thư viện lớp bằng cách sử dụng nuget giải quyết được sự cố.

0

Đây là giải pháp cho vấn đề đó thử nó ....

[System.Web.Mvc.HttpGet] 
public ActionResult About() 
{ 
     ViewBag.Message = "Your app description page."; 

     return View(); 
    } 
+1

Câu trả lời không chỉ chứa mã mà còn giải thích tại sao mã này giải quyết được vấn đề ban đầu. Vui lòng chỉnh sửa câu trả lời của bạn và thêm giải thích. –

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