18

Tôi đang viết câu hỏi này tại đây sau khi cố tìm câu trả lời trong hai ngày.Xác thực url mvc4

về cơ bản đây là những gì đang diễn ra.

tôi có một tài sản trong viewmodel như sau

[Required(ErrorMessage = "Required Field")] 
[Url(ErrorMessage="Please enter a valid url")] 
[DisplayName("Website")] 
public string web { get; set; } 

trong giao diện, tôi có điều này

@Html.EditorFor(model => model.web, new { AutoCompleteType = "Disabled", autocomplete = "off" }) 

nay là vấn đề nằm trong cách thức nhập văn bản cho lĩnh vực này được xác nhận trong phía khách hàng. trường phải có tiền tố giao thức mọi lúc, nếu không nó sẽ trở thành không hợp lệ.

cách tốt nhất để khắc phục vấn đề này là gì?

Rất cám ơn

Trả lời

30

Bạn có thể thực hiện việc này bằng cách sử dụng DataAnnotationsExtensions library. Họ có một số UrlAttribute mà bạn có thể định cấu hình để chỉ xác thực khi một giao thức được chỉ định. Thuộc tính này cũng cung cấp xác thực phía máy khách. Bạn có thể xem ví dụ về hành vi này ở đây: http://dataannotationsextensions.org/Url/Create

Bạn có thể sử dụng thuộc tính này như sau:

using System.ComponentModel.DataAnnotations; 

namespace DataAnnotationsExtensions.Core 
{ 
    public class UrlEntity 
    { 
     [Url] 
     [Required] 
     public string Url { get; set; } 

     [Url(UrlOptions.OptionalProtocol)] 
     [Required] 
     public string UrlWithoutProtocolRequired { get; set; } 

     [Url(UrlOptions.DisallowProtocol)] 
     [Required] 
     public string UrlDisallowProtocol { get; set; } 
    } 
} 

Đối với mục đích của bạn, tùy chọn đầu tiên là đủ.

Gói thư viện này (với sự hỗ trợ ASP.NET MVC bao gồm) có thể được tìm thấy trên NuGet: Install-Package DataAnnotationsExtensions.MVC3

Lưu ý: đây cũng hoạt động tốt với ASP.NET MVC 4

+2

Xin chào, cảm ơn bạn đã trả lời. Tôi đã cố gắng sử dụng '[Url (UrlOptions.OptionalProtocol)]'. nhưng đối với 'UrlOptions' có sẵn, tôi phải thêm' using DataAnnotationsExtensions', sau đó 'Url' trở nên mơ hồ. để sửa lỗi đó, tôi đã sử dụng '[DataAnnotationsExtensions.Url (UrlOptions.OptionalProtocol)]' nhưng nó không xác thực trong giao diện người dùng. – Amila

+1

Được rồi, Cho đến khi tôi tìm thấy những gì tôi đang làm sai với DataAnnotationsExtensions, tôi sẽ kết hợp các câu trả lời. Tôi nắm lấy biểu thức chính quy cho giao thức tùy chọn từ [link] (http://dataannotationsextensions.org/Url/Create) và sử dụng chú thích dữ liệu biểu thức chính quy để xác thực. bây giờ nó hoạt động tốt. Nhưng tôi muốn sử dụng các tiện ích chú thích khác được cung cấp trong DataAnnotationExtensions. Vì vậy, phải tìm ra những gì đang xảy ra – Amila

+0

@ Amila Tôi đã có cùng một vấn đề. Tôi đã đi với việc sử dụng áp lực này thường xuyên thay thế. Không phải tất cả bao gồm nhưng thực hiện công việc '[RegularExpression ("^[(http (s)?): \\/\\/(www \\.)? A-zA-Z0-9 @:% ._ \\ + ~ # =] {2,256} \\. [Az] {2,6} \\ b ([- a-zA-Z0-9 @:% _ \\ +. ~ #? & // =] *) $ ")]' – Lsakurifaisu

0

Không chắc chắn nếu tôi hiểu đầy đủ câu hỏi. Bạn có đang cố gắng xác thực cho các URL được định dạng chính xác không? Nếu vậy, bạn có thể triển khai một DataAnnotation RegularExpression như sau:

[RegularExpression(@"^http(s?)\:\/\/[0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*(:(0-9)*)*(\/?)([a-zA-Z0-9\-\.\?\,\'\/\\\+&%\$#_]*)?$", ErrorMessage = "My Error Message")] 
+0

Điều này không hoạt động. Không có biểu thức chính quy URL nào mà tôi đã thử, khi được thêm làm chú thích dữ liệu MVC, hoạt động. –

+0

Điều này có vẻ phù hợp với tôi [RegularExpression ("^ [(http (s)?): \\/\\/(www \\.)? A-zA-Z0-9 @:% ._ \\ + ~ # =] {2,256} \\. [Az] {2,6} \\ b ([- a-zA-Z0-9 @:% _ \\ +. ~ #? & // =] *) $ ")] – Lsakurifaisu