I overheard some colleagues on work today speaking about that they wanted to limit the length of the URLs on the pages in EPiServer.

I got curious of how to do that so did some research and hacked together a proof of concept :)

It's really easy to implement validation in EPiServer, here's my take on it:

//Using the AlloyProject, all pages inherits from SitePageData
//This code will be running on all pages when editing.
public class PageNameValidation : IValidate<SitePageData>  
{
    IEnumerable<ValidationError> IValidate<SitePageData>.Validate(SitePageData page)
    {
        var fullPath = !string.IsNullOrEmpty(page.ExternalURL) ? page.ExternalURL : UrlResolver.Current.GetUrl(page.ContentLink);
        var maxUrlLength = 20;

        if (fullPath.Length > maxUrlLength)
        {
            return new[]
            {
                new ValidationError()
                {
                    ErrorMessage =
                            string.Format("The length of the URL exceeds the recommendation of maximum {0} chars. Currently it's {1} characters long: {2}",
                                maxUrlLength, fullPath.Length, fullPath),
                    PropertyName = "PageName",
                    Severity = ValidationErrorSeverity.Error,
                    ValidationType = ValidationErrorType.Unspecified
                }
            };
        }

        return new ValidationError[0];
    }
}

Im retrieving the url by checking if a Simple address exists, if not im using the urlresolver to get the relative path.

Personally I don't really see the need of limiting the lengths of the urls so I would probably go with a severity level of Warning/Information instead of Error.

It looks like this in edit mode when trying to publish the page. You can still publish the page, it's just a warning.

If you set the severity level to Error, the editor will not be able to publish the page.

This was just a quick writeup, you can do all kind of validations when editing pages, you can read more about validation here