2012-07-07 39 views
5

Tôi có một số trang web MVC2 có rất nhiều [RequireHttps].Làm thế nào để vô hiệu hóa [RequireHttps] cho tất cả các phương pháp trong khi gỡ lỗi?

Nhưng khi tôi gỡ lỗi, tôi phải bình luận nhiều người trong số họ ở những nơi khác nhau (bộ điều khiển). Và khi mã đã sẵn sàng, tôi phải xóa tất cả các nhận xét.

Vì vậy, phải mất thời gian và đôi khi tôi quên để bỏ ghi chú [RequireHttps] :)

Câu hỏi của tôi là đó là thông lệ tốt nhất để giải quyết vấn đề này?

Cảm ơn bạn!

+1

chỉ vì tò mò - tại sao bạn không thể gỡ lỗi với họ tại chỗ? –

+2

nếu bạn vẫn đang sử dụng máy chủ web tích hợp VS, chuyển sang IIS Express và bạn có thể gỡ lỗi w/SSL được bật: http://learn.iis.net/page.aspx/901/iis-express-faq/ –

+0

@MichaelEdenfield: Tôi nghĩ bình luận của bạn xứng đáng là một câu trả lời. Nó cũng có thể là câu trả lời tốt nhất.Nó không thực sự trả lời câu hỏi, nhưng tôi nghĩ rằng nó có thể giải quyết vấn đề cơ bản. – comecme

Trả lời

3

Tôi muốn sử dụng #if (C# Reference) và đã có một Debug và Release cấu hình:

Sau đó, bạn:

#if RELEASE 
    [RequireHttps] 
#endif 
void methodHere() 
{ 
... 
} 
1

Sử dụng một #if RELEASE ... #endif cấu trúc:

#if RELEASE 
    [RequireHttps] 
#endif 
void YourMethod() 
{ 
    ... 
} 
8

Nếu bạn không muốn nhập các câu lệnh #if xung quanh mọi cách sử dụng, bạn có thể tạo thuộc tính mới không có trong bản dựng gỡ lỗi và một lớp con đơn giản là RequireHttps trong bản phát hành bu ilds:

#if DEBUG 
public class ReleaseRequireHttpsAttribute : Attribute 
{ 
    // no-op 
} 
#elif 
public class ReleaseRequireHttpsAttribute : RequireHttpsAttribute 
{ 
    // does the same thing as RequireHttpsAttribute 
} 
#endif 

Sau đó chỉ cần tìm và thay thế mỗi [RequireHttps] với [ReleaseRequireHttps] và sử dụng cho các phương pháp mới.

2

Sau đây sẽ cho phép bạn DRY lên các chức năng và ngăn ngừa sự cần thiết phải làm ô nhiễm các bộ điều khiển của bạn với tiền xử lý chỉ thị:

public class CustomRequireHttpsAttribute : RequireHttpsAttribute 
{ 
    /* override appropriate method with preprocessor directives */ 
} 

[CustomRequireHttps] 
public ActionResult Foo(string foo) { /* ... */ } 

[CustomRequireHttps] 
public ActionResult Bar(string bar) { /* ... */ } 
4

Vì bạn hỏi về "thực hành tốt nhất" để giải quyết này vấn đề, thực tiễn tốt nhất trong trường hợp này là để lại các thuộc tính tại chỗ và gỡ lỗi chính xác cùng một mã mà bạn triển khai. Bất kỳ câu trả lời nào khác (tất cả các câu trả lời sẽ hoạt động) sẽ có nghĩa là bạn đang gỡ lỗi mã, sau đó thay đổi mã của bạn trước khi bạn triển khai, đó không bao giờ là một ý tưởng hay.

Trong trường hợp này, thật dễ dàng để gỡ lỗi các dự án web qua SSL nếu bạn sử dụng IIS Express. Đây là một thay thế drop-in cho máy chủ web Visual Studio 2010, nhưng với hầu hết các tính năng của IIS, bao gồm hỗ trợ HTTP an toàn. Thông tin chi tiết có thể được tìm thấy ở đây:

http://learn.iis.net/page.aspx/901/iis-express-faq/

Sau khi cài đặt, bạn có thể chuyển đổi các dự án của bạn để sử dụng IIS Express, thiết lập một https ràng buộc trong cấu hình IIS Express, và bước qua như bình thường.

0

Dưới đây là một phiên bản làm việc của thuộc tính tùy chỉnh mà đòi hỏi phải có kết nối HTTPS trừ khi chạy dưới Visual Studio debugger:

/// <summary> 
/// Requires HTTPS connection unless running under Visual Studio debugger. 
/// </summary> 
public class RemoteRequireHttpsAttribute : RequireHttpsAttribute 
{ 
    public override void OnAuthorization(AuthorizationContext filterContext) 
    { 
     if (filterContext != null 
      && filterContext.HttpContext != null 
      && filterContext.HttpContext.Request.IsLocal) 
      return; 

     base.OnAuthorization(filterContext); 
    } 
} 
Các vấn đề liên quan