ASP.net "BasePage" class ideas

asp.net, c#

Solution

- Session related stuff, some complex object in the BasePage that maps to a session, and expose it as a property.

- Doing stuff like filling a crumble pad object.

But most important: do not make your basepage into some helper class. Don't add stuff like `ParseId()`, that's just ridiculous.

Also, based on the first post: make stuff like `IsAuthorized` abstract. This way you don't create giant security holes if someone forgets that there is some virtual method.

Problem

What cool functionality and methods do you add to your ASP.net `BasePage : System.Web.UI.Page` classes? Examples Here's something I use for authentication, and I'd like to hear your opinions on this: ``` protected override void OnPreInit(EventArgs e) { base.OnPreInit(e); // Authentication code omitted... Essentially same as below. if (_RequiresAuthentication && !(IsAuthorized)) { RespondForbidden("You do not have permissions to view this page.", UnauthorizedRedirect); return; } } // This function is overridden in each page subclass and fitted to each page's // own authorization requirements. // This also allows cascading authorization checks, // e.g: User has permission to view page? No - base.IsAuthorized - Is user an admin? protected virtual bool IsAuthorized { get { return true; } } ``` My BasePage class contains an instance of this class: ``` public class StatusCodeResponse { public StatusCodeResponse(HttpContext context) { this._context = context; } /// <summary> /// Responds with a specified status code, and if specified - transfers to a page. /// </summary> private void RespondStatusCode(HttpContext context, System.Net.HttpStatusCode status, string message, string transfer) { if (string.IsNullOrEmpty(transfer)) { throw new HttpException((int)status, message); } context.Response.StatusCode = (int)status; context.Response.StatusDescription = message; context.Server.Transfer(transfer); } public void RespondForbidden(string message, string transfer) { RespondStatusCode(this._context, System.Net.HttpStatusCode.Forbidden, message, transfer); } // And a few more like these... } ``` As a side note, this could be accomplished using extension methods for the `HttpResponse` object. And another method I find quite handy for parsing querystring int arguments: ``` public bool ParseId(string field, out int result) { return (int.TryParse(Request.QueryString[field], out result) && result > 0); } ```

Original source