diff options
120 files changed, 11725 insertions, 80 deletions
diff --git a/lib/System.Web.Abstractions.dll b/lib/System.Web.Abstractions.dll Binary files differindex cd88be0..317242e 100644 --- a/lib/System.Web.Abstractions.dll +++ b/lib/System.Web.Abstractions.dll diff --git a/lib/System.Web.Mvc.dll b/lib/System.Web.Mvc.dll Binary files differindex 598cf6f..10b038f 100644 --- a/lib/System.Web.Mvc.dll +++ b/lib/System.Web.Mvc.dll diff --git a/lib/System.Web.Mvc.xml b/lib/System.Web.Mvc.xml new file mode 100644 index 0000000..a5885c2 --- /dev/null +++ b/lib/System.Web.Mvc.xml @@ -0,0 +1,3136 @@ +<?xml version="1.0"?> +<doc> + <assembly> + <name>System.Web.Mvc</name> + </assembly> + <members> + <member name="T:System.Web.Mvc.ViewResult"> + <summary> + Class used to render a view using an <see cref="T:System.Web.Mvc.IView"/> returned by a <see cref="T:System.Web.Mvc.IViewEngine"/>. + </summary> + </member> + <member name="T:System.Web.Mvc.ViewResultBase"> + <summary> + Base class used to supply the model to the view and then render the view to the response. + </summary> + </member> + <member name="T:System.Web.Mvc.ActionResult"> + <summary> + Encapsulates the result of an action method and is used to perform a + framework level operation on the action method's behalf. + </summary> + </member> + <member name="M:System.Web.Mvc.ActionResult.ExecuteResult(System.Web.Mvc.ControllerContext)"> + <summary> + Enables processing of the result of an action method by a custom type that inherits from <see cref="T:System.Web.Mvc.ActionResult"/>. + </summary> + <param name="context"></param> + </member> + <member name="M:System.Web.Mvc.ViewResultBase.ExecuteResult(System.Web.Mvc.ControllerContext)"> + <summary> + When called by the action invoker, renders the view to the response. + </summary> + <param name="context"></param> + </member> + <member name="M:System.Web.Mvc.ViewResultBase.FindView(System.Web.Mvc.ControllerContext)"> + <summary> + When overridden, returns the <see cref="T:System.Web.Mvc.ViewEngineResult"/> used to render the view. + </summary> + <param name="context"></param> + <returns></returns> + </member> + <member name="P:System.Web.Mvc.ViewResultBase.TempData"> + <summary> + Gets or sets the <see cref="T:System.Web.Mvc.TempDataDictionary"/> for this result. + </summary> + </member> + <member name="P:System.Web.Mvc.ViewResultBase.View"> + <summary> + Gets or sets the <see cref="T:System.Web.Mvc.IView"/> that is rendered to the response. + </summary> + </member> + <member name="P:System.Web.Mvc.ViewResultBase.ViewData"> + <summary> + Gets or sets the view data <see cref="T:System.Web.Mvc.ViewDataDictionary"/> for this result. + </summary> + </member> + <member name="P:System.Web.Mvc.ViewResultBase.ViewEngineCollection"> + <summary> + Gets or sets the view engines (<see cref="T:System.Web.Mvc.ViewEngineCollection"/>) associated with this result. + </summary> + </member> + <member name="P:System.Web.Mvc.ViewResultBase.ViewName"> + <summary> + The name of the view to be rendered. + </summary> + </member> + <member name="M:System.Web.Mvc.ViewResult.FindView(System.Web.Mvc.ControllerContext)"> + <summary> + Searches the registered view engines and returns the <see cref="T:System.Web.Mvc.ViewEngineResult"/> used to render the view. + </summary> + <param name="context"></param> + <returns></returns> + </member> + <member name="P:System.Web.Mvc.ViewResult.MasterName"> + <summary> + The name of the master view (such as a master page or template) to use when rendering the view. + </summary> + </member> + <member name="T:System.Web.Mvc.IActionInvoker"> + <summary> + Defines the contract for an action invoker, used to invoke an action in response to an http request. + </summary> + </member> + <member name="M:System.Web.Mvc.IActionInvoker.InvokeAction(System.Web.Mvc.ControllerContext,System.String)"> + <summary> + Invokes the specified action. + </summary> + <param name="controllerContext"></param> + <param name="actionName">The name of the action.</param> + <returns>True if the action was found, otherwise false.</returns> + </member> + <member name="M:System.Web.Mvc.Html.RenderPartialExtensions.RenderPartial(System.Web.Mvc.HtmlHelper,System.String)"> + <summary> + Renders the specified partial view. + </summary> + <param name="htmlHelper"></param> + <param name="partialViewName">The name of the partial view</param> + </member> + <member name="M:System.Web.Mvc.Html.RenderPartialExtensions.RenderPartial(System.Web.Mvc.HtmlHelper,System.String,System.Web.Mvc.ViewDataDictionary)"> + <summary> + Renders the specified partial view replacing its ViewData property with the + supplied <see cref="T:System.Web.Mvc.ViewDataDictionary">ViewDataDictionary</see>. + </summary> + <param name="htmlHelper"></param> + <param name="partialViewName">The name of the partial view</param> + </member> + <member name="M:System.Web.Mvc.Html.RenderPartialExtensions.RenderPartial(System.Web.Mvc.HtmlHelper,System.String,System.Object)"> + <summary> + Renders the specified partial view passing in a copy of the current + <see cref="T:System.Web.Mvc.ViewDataDictionary">ViewDataDictionary</see>, but + with the Model property set to the specified model. + </summary> + <param name="htmlHelper"></param> + <param name="partialViewName">The name of the partial view</param> + </member> + <member name="M:System.Web.Mvc.Html.RenderPartialExtensions.RenderPartial(System.Web.Mvc.HtmlHelper,System.String,System.Object,System.Web.Mvc.ViewDataDictionary)"> + <summary> + Renders the specified partial view, replacing the partial view's ViewData property with the + supplied <see cref="T:System.Web.Mvc.ViewDataDictionary">ViewDataDictionary</see>. The Model + property of the view data is set to the specified model. + </summary> + <param name="htmlHelper"></param> + <param name="partialViewName">The name of the partial view</param> + <param name="model">The model for the partial view</param> + <param name="viewData">The view data for the partial view</param> + </member> + <member name="T:System.Web.Mvc.FileStreamResult"> + <summary> + Sends binary content to the response via a <see cref="T:System.IO.Stream"/>. + </summary> + </member> + <member name="T:System.Web.Mvc.FileResult"> + <summary> + Base class used to send binary content to the response + </summary> + </member> + <member name="P:System.Web.Mvc.FileResult.ContentType"> + <summary> + The content type to use for the response. + </summary> + </member> + <member name="P:System.Web.Mvc.FileResult.FileDownloadName"> + <summary> + If specified, sets the content-disposition header so that a file download dialog appears in the browesr with the specified file name. + </summary> + </member> + <member name="M:System.Web.Mvc.FileStreamResult.#ctor(System.IO.Stream,System.String)"> + <summary> + Initializes a new instance of <see cref="T:System.Web.Mvc.FileStreamResult"/> + </summary> + <param name="fileStream">The stream to send to the response</param> + <param name="contentType">The content type to use for the response</param> + </member> + <member name="P:System.Web.Mvc.FileStreamResult.FileStream"> + <summary> + Gets the stream which will be sent to the response. + </summary> + </member> + <member name="M:System.Web.Mvc.Ajax.AjaxExtensions.ActionLink(System.Web.Mvc.AjaxHelper,System.String,System.String,System.Web.Mvc.Ajax.AjaxOptions)"> + <summary> + Returns an anchor tag containing the url to the specified action such that when the action link is clicked, + the action is invoked asynchronously via javascript. + </summary> + <param name="linkText">The inner text of the anchor tag</param> + <param name="actionName">The name of the action</param> + <param name="ajaxHelper"></param> + <param name="ajaxOptions">An object providing options for the asynchronous request</param> + <returns>An anchor tag</returns> + </member> + <member name="M:System.Web.Mvc.Ajax.AjaxExtensions.ActionLink(System.Web.Mvc.AjaxHelper,System.String,System.String,System.Object,System.Web.Mvc.Ajax.AjaxOptions)"> + <summary> + Returns an anchor tag containing the url to the specified action such that when the action link is clicked, + the action is invoked asynchronously via javascript. + </summary> + <param name="linkText">The inner text of the anchor tag</param> + <param name="actionName">The name of the action</param> + <param name="routeValues">An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax.</param> + <param name="ajaxHelper"></param> + <param name="ajaxOptions">An object providing options for the asynchronous request</param> + <returns>An anchor tag</returns> + </member> + <member name="M:System.Web.Mvc.Ajax.AjaxExtensions.ActionLink(System.Web.Mvc.AjaxHelper,System.String,System.String,System.Object,System.Web.Mvc.Ajax.AjaxOptions,System.Object)"> + <summary> + Returns an anchor tag containing the url to the specified action such that when the action link is clicked, + the action is invoked asynchronously via javascript. + </summary> + <param name="linkText">The inner text of the anchor tag</param> + <param name="actionName">The name of the action</param> + <param name="controllerName">The name of the controller</param> + <param name="routeValues">An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax.</param> + <param name="htmlAttributes">An object containing the html attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax</param> + <param name="protocol">The protocol for the URL such as "http" or "https"</param> + <param name="fragment">The url fragment name (also known as anchor name)</param> + <param name="hostName">The host name for the URL</param> + <param name="ajaxHelper"></param> + <param name="ajaxOptions">An object providing options for the asynchronous request</param> + <returns>An anchor tag</returns> + </member> + <member name="M:System.Web.Mvc.Ajax.AjaxExtensions.ActionLink(System.Web.Mvc.AjaxHelper,System.String,System.String,System.Web.Routing.RouteValueDictionary,System.Web.Mvc.Ajax.AjaxOptions)"> + <summary> + Returns an anchor tag containing the url to the specified action such that when the action link is clicked, + the action is invoked asynchronously via javascript. + </summary> + <param name="linkText">The inner text of the anchor tag</param> + <param name="actionName">The name of the action</param> + <param name="routeValues">An object containing the parameters for a route.</param> + <param name="ajaxHelper"></param> + <param name="ajaxOptions">An object providing options for the asynchronous request</param> + <returns>An anchor tag</returns> + </member> + <member name="M:System.Web.Mvc.Ajax.AjaxExtensions.ActionLink(System.Web.Mvc.AjaxHelper,System.String,System.String,System.Web.Routing.RouteValueDictionary,System.Web.Mvc.Ajax.AjaxOptions,System.Collections.Generic.IDictionary{System.String,System.Object})"> + <summary> + Returns an anchor tag containing the url to the specified action such that when the action link is clicked, + the action is invoked asynchronously via javascript. + </summary> + <param name="linkText">The inner text of the anchor tag</param> + <param name="actionName">The name of the action</param> + <param name="routeValues">An object containing the parameters for a route.</param> + <param name="htmlAttributes">An object containing the html attributes for the element.</param> + <param name="ajaxHelper"></param> + <param name="ajaxOptions">An object providing options for the asynchronous request</param> + <returns>An anchor tag</returns> + </member> + <member name="M:System.Web.Mvc.Ajax.AjaxExtensions.ActionLink(System.Web.Mvc.AjaxHelper,System.String,System.String,System.String,System.Web.Mvc.Ajax.AjaxOptions)"> + <summary> + Returns an anchor tag containing the url to the specified action such that when the action link is clicked, + the action is invoked asynchronously via javascript. + </summary> + <param name="linkText">The inner text of the anchor tag</param> + <param name="actionName">The name of the action</param> + <param name="controllerName">The name of the controller</param> + <param name="ajaxHelper"></param> + <param name="ajaxOptions">An object providing options for the asynchronous request</param> + <returns>An anchor tag</returns> + </member> + <member name="M:System.Web.Mvc.Ajax.AjaxExtensions.ActionLink(System.Web.Mvc.AjaxHelper,System.String,System.String,System.String,System.Object,System.Web.Mvc.Ajax.AjaxOptions)"> + <summary> + Returns an anchor tag containing the url to the specified action such that when the action link is clicked, + the action is invoked asynchronously via javascript. + </summary> + <param name="linkText">The inner text of the anchor tag</param> + <param name="actionName">The name of the action</param> + <param name="controllerName">The name of the controller</param> + <param name="routeValues">An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax.</param> + <param name="ajaxHelper"></param> + <param name="ajaxOptions">An object providing options for the asynchronous request</param> + <returns>An anchor tag</returns> + </member> + <member name="M:System.Web.Mvc.Ajax.AjaxExtensions.ActionLink(System.Web.Mvc.AjaxHelper,System.String,System.String,System.String,System.Object,System.Web.Mvc.Ajax.AjaxOptions,System.Object)"> + <summary> + Returns an anchor tag containing the url to the specified action such that when the action link is clicked, + the action is invoked asynchronously via javascript. + </summary> + <param name="linkText">The inner text of the anchor tag</param> + <param name="actionName">The name of the action</param> + <param name="controllerName">The name of the controller</param> + <param name="routeValues">An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax.</param> + <param name="htmlAttributes">An object containing the html attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax</param> + <param name="ajaxHelper"></param> + <param name="ajaxOptions">An object providing options for the asynchronous request</param> + <returns>An anchor tag</returns> + </member> + <member name="M:System.Web.Mvc.Ajax.AjaxExtensions.ActionLink(System.Web.Mvc.AjaxHelper,System.String,System.String,System.String,System.Web.Routing.RouteValueDictionary,System.Web.Mvc.Ajax.AjaxOptions)"> + <summary> + Returns an anchor tag containing the url to the specified action such that when the action link is clicked, + the action is invoked asynchronously via javascript. + </summary> + <param name="linkText">The inner text of the anchor tag</param> + <param name="actionName">The name of the action</param> + <param name="controllerName">The name of the controller</param> + <param name="routeValues">An object containing the parameters for a route..</param> + <param name="ajaxHelper"></param> + <param name="ajaxOptions">An object providing options for the asynchronous request</param> + <returns>An anchor tag</returns> + </member> + <member name="M:System.Web.Mvc.Ajax.AjaxExtensions.ActionLink(System.Web.Mvc.AjaxHelper,System.String,System.String,System.String,System.Web.Routing.RouteValueDictionary,System.Web.Mvc.Ajax.AjaxOptions,System.Collections.Generic.IDictionary{System.String,System.Object})"> + <summary> + Returns an anchor tag containing the url to the specified action such that when the action link is clicked, + the action is invoked asynchronously via javascript. + </summary> + <param name="linkText">The inner text of the anchor tag</param> + <param name="actionName">The name of the action</param> + <param name="controllerName">The name of the controller</param> + <param name="routeValues">An object containing the parameters for a route.</param> + <param name="htmlAttributes">An object containing the html attributes for the element.</param> + <param name="ajaxHelper"></param> + <param name="ajaxOptions">An object providing options for the asynchronous request</param> + <returns>An anchor tag</returns> + </member> + <member name="M:System.Web.Mvc.Ajax.AjaxExtensions.ActionLink(System.Web.Mvc.AjaxHelper,System.String,System.String,System.String,System.String,System.String,System.String,System.Object,System.Web.Mvc.Ajax.AjaxOptions,System.Object)"> + <summary> + Returns an anchor tag containing the url to the specified action such that when the action link is clicked, + the action is invoked asynchronously via javascript. + </summary> + <param name="linkText">The inner text of the anchor tag</param> + <param name="actionName">The name of the action</param> + <param name="controllerName">The name of the controller</param> + <param name="routeValues">An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax.</param> + <param name="htmlAttributes">An object containing the html attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax</param> + <param name="protocol">The protocol for the URL such as "http" or "https"</param> + <param name="fragment">The url fragment name (also known as anchor name)</param> + <param name="hostName">The host name for the URL</param> + <param name="ajaxHelper"></param> + <param name="ajaxOptions">An object providing options for the asynchronous request</param> + <returns>An anchor tag</returns> + </member> + <member name="M:System.Web.Mvc.Ajax.AjaxExtensions.ActionLink(System.Web.Mvc.AjaxHelper,System.String,System.String,System.String,System.String,System.String,System.String,System.Web.Routing.RouteValueDictionary,System.Web.Mvc.Ajax.AjaxOptions,System.Collections.Generic.IDictionary{System.String,System.Object})"> + <summary> + Returns an anchor tag containing the url to the specified action such that when the action link is clicked, + the action is invoked asynchronously via javascript. + </summary> + <param name="linkText">The inner text of the anchor tag</param> + <param name="actionName">The name of the action</param> + <param name="controllerName">The name of the controller</param> + <param name="routeValues">An object containing the parameters for a route.</param> + <param name="htmlAttributes">An object containing the html attributes for the element.</param> + <param name="protocol">The protocol for the URL such as "http" or "https"</param> + <param name="fragment">The url fragment name (also known as anchor name)</param> + <param name="hostName">The host name for the URL</param> + <param name="ajaxHelper"></param> + <param name="ajaxOptions">An object providing options for the asynchronous request</param> + <returns>An anchor tag</returns> + </member> + <member name="M:System.Web.Mvc.Ajax.AjaxExtensions.BeginForm(System.Web.Mvc.AjaxHelper,System.Web.Mvc.Ajax.AjaxOptions)"> + <summary> + Writes a begin form tag to the response while returning an <see cref="!:System.Web.Mvc.MvcForm"/> + instance. Can be used in a using block in which case it renders the end form tag at the end of the + using block. The form is submitted asynchronously using javascript. + </summary> + <param name="htmlHelper"></param> + <param name="ajaxOptions">An object providing options for the asynchronous request</param> + <returns>An <see cref="!:System.Web.Mvc.MvcForm"/> instance.</returns> + </member> + <member name="M:System.Web.Mvc.Ajax.AjaxExtensions.BeginForm(System.Web.Mvc.AjaxHelper,System.String,System.Web.Mvc.Ajax.AjaxOptions)"> + <summary> + Writes a begin form tag to the response while returning an <see cref="!:System.Web.Mvc.MvcForm"/> + instance. Can be used in a using block in which case it renders the end form tag at the end of the + using block. The form is submitted asynchronously using javascript. + </summary> + <param name="htmlHelper"></param> + <param name="actionName">The name of the action</param> + <param name="ajaxOptions">An object providing options for the asynchronous request</param> + <returns>An <see cref="!:System.Web.Mvc.MvcForm"/> instance.</returns> + </member> + <member name="M:System.Web.Mvc.Ajax.AjaxExtensions.BeginForm(System.Web.Mvc.AjaxHelper,System.String,System.Object,System.Web.Mvc.Ajax.AjaxOptions)"> + <summary> + Writes a begin form tag to the response while returning an <see cref="!:System.Web.Mvc.MvcForm"/> + instance. Can be used in a using block in which case it renders the end form tag at the end of the + using block. The form is submitted asynchronously using javascript. + </summary> + <param name="htmlHelper"></param> + <param name="actionName">The name of the action</param> + <param name="routeValues">An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax.</param> + <param name="ajaxOptions">An object providing options for the asynchronous request</param> + <returns>An <see cref="!:System.Web.Mvc.MvcForm"/> instance.</returns> + </member> + <member name="M:System.Web.Mvc.Ajax.AjaxExtensions.BeginForm(System.Web.Mvc.AjaxHelper,System.String,System.Object,System.Web.Mvc.Ajax.AjaxOptions,System.Object)"> + <summary> + Writes a begin form tag to the response while returning an <see cref="!:System.Web.Mvc.MvcForm"/> + instance. Can be used in a using block in which case it renders the end form tag at the end of the + using block. The form is submitted asynchronously using javascript. + </summary> + <param name="htmlHelper"></param> + <param name="actionName">The name of the action</param> + <param name="controllerName">The name of the controller</param> + <param name="routeValues">An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax.</param> + <param name="htmlAttributes">An object containing the html attributes for the element. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax.</param> + <param name="ajaxOptions">An object providing options for the asynchronous request</param> + <returns>An <see cref="!:System.Web.Mvc.MvcForm"/> instance.</returns> + </member> + <member name="M:System.Web.Mvc.Ajax.AjaxExtensions.BeginForm(System.Web.Mvc.AjaxHelper,System.String,System.Web.Routing.RouteValueDictionary,System.Web.Mvc.Ajax.AjaxOptions)"> + <summary> + Writes a begin form tag to the response while returning an <see cref="!:System.Web.Mvc.MvcForm"/> + instance. Can be used in a using block in which case it renders the end form tag at the end of the + using block. The form is submitted asynchronously using javascript. + </summary> + <param name="htmlHelper"></param> + <param name="actionName">The name of the action</param> + <param name="controllerName">The name of the controller</param> + <param name="routeValues">An object containing the parameters for a route.</param> + <param name="ajaxOptions">An object providing options for the asynchronous request</param> + <returns>An <see cref="!:System.Web.Mvc.MvcForm"/> instance.</returns> + </member> + <member name="M:System.Web.Mvc.Ajax.AjaxExtensions.BeginForm(System.Web.Mvc.AjaxHelper,System.String,System.Web.Routing.RouteValueDictionary,System.Web.Mvc.Ajax.AjaxOptions,System.Collections.Generic.IDictionary{System.String,System.Object})"> + <summary> + Writes a begin form tag to the response while returning an <see cref="!:System.Web.Mvc.MvcForm"/> + instance. Can be used in a using block in which case it renders the end form tag at the end of the + using block. The form is submitted asynchronously using javascript. + </summary> + <param name="htmlHelper"></param> + <param name="actionName">The name of the action</param> + <param name="routeValues">An object containing the parameters for a route.</param> + <param name="htmlAttributes">An object containing the html attributes for the element.</param> + <param name="ajaxOptions">An object providing options for the asynchronous request</param> + <returns>An <see cref="!:System.Web.Mvc.MvcForm"/> instance.</returns> + </member> + <member name="M:System.Web.Mvc.Ajax.AjaxExtensions.BeginForm(System.Web.Mvc.AjaxHelper,System.String,System.String,System.Web.Mvc.Ajax.AjaxOptions)"> + <summary> + Writes a begin form tag to the response while returning an <see cref="!:System.Web.Mvc.MvcForm"/> + instance. Can be used in a using block in which case it renders the end form tag at the end of the + using block. The form is submitted asynchronously using javascript. + </summary> + <param name="htmlHelper"></param> + <param name="actionName">The name of the action</param> + <param name="controllerName">The name of the controller</param> + <param name="ajaxOptions">An object providing options for the asynchronous request</param> + <returns>An <see cref="!:System.Web.Mvc.MvcForm"/> instance.</returns> + </member> + <member name="M:System.Web.Mvc.Ajax.AjaxExtensions.BeginForm(System.Web.Mvc.AjaxHelper,System.String,System.String,System.Object,System.Web.Mvc.Ajax.AjaxOptions)"> + <summary> + Writes a begin form tag to the response while returning an <see cref="!:System.Web.Mvc.MvcForm"/> + instance. Can be used in a using block in which case it renders the end form tag at the end of the + using block. The form is submitted asynchronously using javascript. + </summary> + <param name="htmlHelper"></param> + <param name="actionName">The name of the action</param> + <param name="controllerName">The name of the controller</param> + <param name="routeValues">An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax.</param> + <param name="ajaxOptions">An object providing options for the asynchronous request</param> + <returns>An <see cref="!:System.Web.Mvc.MvcForm"/> instance.</returns> + </member> + <member name="M:System.Web.Mvc.Ajax.AjaxExtensions.BeginForm(System.Web.Mvc.AjaxHelper,System.String,System.String,System.Object,System.Web.Mvc.Ajax.AjaxOptions,System.Object)"> + <summary> + Writes a begin form tag to the response while returning an <see cref="!:System.Web.Mvc.MvcForm"/> + instance. Can be used in a using block in which case it renders the end form tag at the end of the + using block. The form is submitted asynchronously using javascript. + </summary> + <param name="htmlHelper"></param> + <param name="actionName">The name of the action</param> + <param name="controllerName">The name of the controller</param> + <param name="routeValues">An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax.</param> + <param name="htmlAttributes">An object containing the html attributes for the element. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax.</param> + <param name="ajaxOptions">An object providing options for the asynchronous request</param> + <returns>An <see cref="!:System.Web.Mvc.MvcForm"/> instance.</returns> + </member> + <member name="M:System.Web.Mvc.Ajax.AjaxExtensions.BeginForm(System.Web.Mvc.AjaxHelper,System.String,System.String,System.Web.Routing.RouteValueDictionary,System.Web.Mvc.Ajax.AjaxOptions)"> + <summary> + Writes a begin form tag to the response while returning an <see cref="!:System.Web.Mvc.MvcForm"/> + instance. Can be used in a using block in which case it renders the end form tag at the end of the + using block. The form is submitted asynchronously using javascript. + </summary> + <param name="htmlHelper"></param> + <param name="actionName">The name of the action</param> + <param name="controllerName">The name of the controller</param> + <param name="routeValues">An object containing the parameters for a route</param> + <param name="ajaxOptions">An object providing options for the asynchronous request</param> + <returns>An <see cref="!:System.Web.Mvc.MvcForm"/> instance.</returns> + </member> + <member name="M:System.Web.Mvc.Ajax.AjaxExtensions.BeginForm(System.Web.Mvc.AjaxHelper,System.String,System.String,System.Web.Routing.RouteValueDictionary,System.Web.Mvc.Ajax.AjaxOptions,System.Collections.Generic.IDictionary{System.String,System.Object})"> + <summary> + Writes a begin form tag to the response while returning an <see cref="!:System.Web.Mvc.MvcForm"/> + instance. Can be used in a using block in which case it renders the end form tag at the end of the + using block. The form is submitted asynchronously using javascript. + </summary> + <param name="htmlHelper"></param> + <param name="actionName">The name of the action</param> + <param name="controllerName">The name of the controller</param> + <param name="routeValues">An object containing the parameters for a route</param> + <param name="htmlAttributes">An object containing the html attributes for the element</param> + <param name="ajaxOptions">An object providing options for the asynchronous request</param> + <returns>An <see cref="!:System.Web.Mvc.MvcForm"/> instance.</returns> + </member> + <member name="M:System.Web.Mvc.Ajax.AjaxExtensions.BeginRouteForm(System.Web.Mvc.AjaxHelper,System.String,System.Web.Mvc.Ajax.AjaxOptions)"> + <summary> + Writes a begin form tag to the response while returning an <see cref="!:System.Web.Mvc.MvcForm"/> + instance. Can be used in a using block in which case it renders the end form tag at the end of the + using block. The form is submitted asynchronously using javascript. + </summary> + <param name="htmlHelper"></param> + <param name="routeName">The name of the route to used to obtain the form post url.</param> + <param name="ajaxOptions">An object providing options for the asynchronous request</param> + <returns>An <see cref="!:System.Web.Mvc.MvcForm"/> instance.</returns> + </member> + <member name="M:System.Web.Mvc.Ajax.AjaxExtensions.BeginRouteForm(System.Web.Mvc.AjaxHelper,System.String,System.Object,System.Web.Mvc.Ajax.AjaxOptions)"> + <summary> + Writes a begin form tag to the response while returning an <see cref="!:System.Web.Mvc.MvcForm"/> + instance. Can be used in a using block in which case it renders the end form tag at the end of the + using block. The form is submitted asynchronously using javascript. + </summary> + <param name="htmlHelper"></param> + <param name="routeName">The name of the route to used to obtain the form post url.</param> + <param name="routeValues">An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax.</param> + <param name="ajaxOptions">An object providing options for the asynchronous request</param> + <returns>An <see cref="!:System.Web.Mvc.MvcForm"/> instance.</returns> + </member> + <member name="M:System.Web.Mvc.Ajax.AjaxExtensions.BeginRouteForm(System.Web.Mvc.AjaxHelper,System.String,System.Object,System.Web.Mvc.Ajax.AjaxOptions,System.Object)"> + <summary> + Writes a begin form tag to the response while returning an <see cref="!:System.Web.Mvc.MvcForm"/> + instance. Can be used in a using block in which case it renders the end form tag at the end of the + using block. The form is submitted asynchronously using javascript. + </summary> + <param name="htmlHelper"></param> + <param name="routeName">The name of the route to used to obtain the form post url.</param> + <param name="routeValues">An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax.</param> + <param name="htmlAttributes">An object containing the html attributes for the element. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax.</param> + <param name="ajaxOptions">An object providing options for the asynchronous request</param> + <returns>An <see cref="!:System.Web.Mvc.MvcForm"/> instance.</returns> + </member> + <member name="M:System.Web.Mvc.Ajax.AjaxExtensions.BeginRouteForm(System.Web.Mvc.AjaxHelper,System.String,System.Web.Routing.RouteValueDictionary,System.Web.Mvc.Ajax.AjaxOptions)"> + <summary> + Writes a begin form tag to the response while returning an <see cref="!:System.Web.Mvc.MvcForm"/> + instance. Can be used in a using block in which case it renders the end form tag at the end of the + using block. The form is submitted asynchronously using javascript. + </summary> + <param name="htmlHelper"></param> + <param name="routeName">The name of the route to used to obtain the form post url.</param> + <param name="routeValues">An object containing the parameters for a route.</param> + <param name="ajaxOptions">An object providing options for the asynchronous request</param> + <returns>An <see cref="!:System.Web.Mvc.MvcForm"/> instance.</returns> + </member> + <member name="M:System.Web.Mvc.Ajax.AjaxExtensions.BeginRouteForm(System.Web.Mvc.AjaxHelper,System.String,System.Web.Routing.RouteValueDictionary,System.Web.Mvc.Ajax.AjaxOptions,System.Collections.Generic.IDictionary{System.String,System.Object})"> + <summary> + Writes a begin form tag to the response while returning an <see cref="!:System.Web.Mvc.MvcForm"/> + instance. Can be used in a using block in which case it renders the end form tag at the end of the + using block. The form is submitted asynchronously using javascript. + </summary> + <param name="htmlHelper"></param> + <param name="routeName">The name of the route to used to obtain the form post url.</param> + <param name="routeValues">An object containing the parameters for a route.</param> + <param name="htmlAttributes">An object containing the html attributes for the element.</param> + <param name="ajaxOptions">An object providing options for the asynchronous request</param> + <returns>An <see cref="!:System.Web.Mvc.MvcForm"/> instance.</returns> + </member> + <member name="M:System.Web.Mvc.Ajax.AjaxExtensions.RouteLink(System.Web.Mvc.AjaxHelper,System.String,System.Object,System.Web.Mvc.Ajax.AjaxOptions)"> + <summary> + Returns an anchor tag containing the virtual path for the specified route values such that when the link is clicked, + a request is made to the virtual path asynchronously via javascript. + </summary> + <param name="ajaxHelper"></param> + <param name="linkText">The inner text of the anchor tag</param> + <param name="routeValues">An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax.</param> + <param name="ajaxOptions">An object providing options for the asynchronous request</param> + <returns>An anchor tag</returns> + </member> + <member name="M:System.Web.Mvc.Ajax.AjaxExtensions.RouteLink(System.Web.Mvc.AjaxHelper,System.String,System.Object,System.Web.Mvc.Ajax.AjaxOptions,System.Object)"> + <summary> + Returns an anchor tag containing the virtual path for the specified route values such that when the link is clicked, + a request is made to the virtual path asynchronously via javascript. + </summary> + <param name="ajaxHelper"></param> + <param name="linkText">The inner text of the anchor tag</param> + <param name="routeValues">An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax.</param> + <param name="ajaxOptions">An object providing options for the asynchronous request</param> + <param name="htmlAttributes">An object containing the html attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax</param> + <returns>An anchor tag</returns> + </member> + <member name="M:System.Web.Mvc.Ajax.AjaxExtensions.RouteLink(System.Web.Mvc.AjaxHelper,System.String,System.Web.Routing.RouteValueDictionary,System.Web.Mvc.Ajax.AjaxOptions)"> + <summary> + Returns an anchor tag containing the virtual path for the specified route values such that when the link is clicked, + a request is made to the virtual path asynchronously via javascript. + </summary> + <param name="ajaxHelper"></param> + <param name="linkText">The inner text of the anchor tag</param> + <param name="routeValues">An object containing the parameters for a route.</param> + <param name="ajaxOptions">An object providing options for the asynchronous request</param> + <returns>An anchor tag</returns> + </member> + <member name="M:System.Web.Mvc.Ajax.AjaxExtensions.RouteLink(System.Web.Mvc.AjaxHelper,System.String,System.Web.Routing.RouteValueDictionary,System.Web.Mvc.Ajax.AjaxOptions,System.Collections.Generic.IDictionary{System.String,System.Object})"> + <summary> + Returns an anchor tag containing the virtual path for the specified route values such that when the link is clicked, + a request is made to the virtual path asynchronously via javascript. + </summary> + <param name="ajaxHelper"></param> + <param name="linkText">The inner text of the anchor tag</param> + <param name="routeValues">An object containing the parameters for a route.</param> + <param name="ajaxOptions">An object providing options for the asynchronous request</param> + <param name="htmlAttributes">An object containing the html attributes for the element</param> + <returns>An anchor tag</returns> + </member> + <member name="M:System.Web.Mvc.Ajax.AjaxExtensions.RouteLink(System.Web.Mvc.AjaxHelper,System.String,System.String,System.Web.Mvc.Ajax.AjaxOptions)"> + <summary> + Returns an anchor tag containing the virtual path for the specified route values such that when the link is clicked, + a request is made to the virtual path asynchronously via javascript. + </summary> + <param name="ajaxHelper"></param> + <param name="linkText">The inner text of the anchor tag</param> + <param name="routeName">The name of the route to used to obtain the form post url.</param> + <param name="ajaxOptions">An object providing options for the asynchronous request</param> + <returns>An anchor tag</returns> + </member> + <member name="M:System.Web.Mvc.Ajax.AjaxExtensions.RouteLink(System.Web.Mvc.AjaxHelper,System.String,System.String,System.Web.Mvc.Ajax.AjaxOptions,System.Object)"> + <summary> + Returns an anchor tag containing the virtual path for the specified route values such that when the link is clicked, + a request is made to the virtual path asynchronously via javascript. + </summary> + <param name="ajaxHelper"></param> + <param name="linkText">The inner text of the anchor tag</param> + <param name="routeName">The name of the route to used to obtain the form post url.</param> + <param name="ajaxOptions">An object providing options for the asynchronous request</param> + <param name="htmlAttributes">An object containing the html attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax</param> + <returns>An anchor tag</returns> + </member> + <member name="M:System.Web.Mvc.Ajax.AjaxExtensions.RouteLink(System.Web.Mvc.AjaxHelper,System.String,System.String,System.Web.Mvc.Ajax.AjaxOptions,System.Collections.Generic.IDictionary{System.String,System.Object})"> + <summary> + Returns an anchor tag containing the virtual path for the specified route values such that when the link is clicked, + a request is made to the virtual path asynchronously via javascript. + </summary> + <param name="ajaxHelper"></param> + <param name="linkText">The inner text of the anchor tag</param> + <param name="routeName">The name of the route to used to obtain the form post url.</param> + <param name="ajaxOptions">An object providing options for the asynchronous request</param> + <param name="htmlAttributes">An object containing the html attributes for the element</param> + <returns>An anchor tag</returns> + </member> + <member name="M:System.Web.Mvc.Ajax.AjaxExtensions.RouteLink(System.Web.Mvc.AjaxHelper,System.String,System.String,System.Object,System.Web.Mvc.Ajax.AjaxOptions)"> + <summary> + Returns an anchor tag containing the virtual path for the specified route values such that when the link is clicked, + a request is made to the virtual path asynchronously via javascript. + </summary> + <param name="ajaxHelper"></param> + <param name="linkText">The inner text of the anchor tag</param> + <param name="routeName">The name of the route to used to obtain the form post url.</param> + <param name="routeValues">An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax.</param> + <param name="ajaxOptions">An object providing options for the asynchronous request</param> + <returns>An anchor tag</returns> + </member> + <member name="M:System.Web.Mvc.Ajax.AjaxExtensions.RouteLink(System.Web.Mvc.AjaxHelper,System.String,System.String,System.Object,System.Web.Mvc.Ajax.AjaxOptions,System.Object)"> + <summary> + Returns an anchor tag containing the virtual path for the specified route values such that when the link is clicked, + a request is made to the virtual path asynchronously via javascript. + </summary> + <param name="ajaxHelper"></param> + <param name="linkText">The inner text of the anchor tag</param> + <param name="routeName">The name of the route to used to obtain the form post url.</param> + <param name="routeValues">An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax.</param> + <param name="ajaxOptions">An object providing options for the asynchronous request</param> + <param name="htmlAttributes">An object containing the html attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax</param> + <returns>An anchor tag</returns> + </member> + <member name="M:System.Web.Mvc.Ajax.AjaxExtensions.RouteLink(System.Web.Mvc.AjaxHelper,System.String,System.String,System.Web.Routing.RouteValueDictionary,System.Web.Mvc.Ajax.AjaxOptions)"> + <summary> + Returns an anchor tag containing the virtual path for the specified route values such that when the link is clicked, + a request is made to the virtual path asynchronously via javascript. + </summary> + <param name="ajaxHelper"></param> + <param name="linkText">The inner text of the anchor tag</param> + <param name="routeName">The name of the route to used to obtain the form post url.</param> + <param name="routeValues">An object containing the parameters for a route.</param> + <param name="ajaxOptions">An object providing options for the asynchronous request</param> + <returns>An anchor tag</returns> + </member> + <member name="M:System.Web.Mvc.Ajax.AjaxExtensions.RouteLink(System.Web.Mvc.AjaxHelper,System.String,System.String,System.Web.Routing.RouteValueDictionary,System.Web.Mvc.Ajax.AjaxOptions,System.Collections.Generic.IDictionary{System.String,System.Object})"> + <summary> + Returns an anchor tag containing the virtual path for the specified route values such that when the link is clicked, + a request is made to the virtual path asynchronously via javascript. + </summary> + <param name="ajaxHelper"></param> + <param name="linkText">The inner text of the anchor tag</param> + <param name="routeName">The name of the route to used to obtain the form post url.</param> + <param name="routeValues">An object containing the parameters for a route.</param> + <param name="ajaxOptions">An object providing options for the asynchronous request</param> + <param name="htmlAttributes">An object containing the html attributes for the element</param> + <returns>An anchor tag</returns> + </member> + <member name="M:System.Web.Mvc.Ajax.AjaxExtensions.RouteLink(System.Web.Mvc.AjaxHelper,System.String,System.String,System.String,System.String,System.String,System.Web.Routing.RouteValueDictionary,System.Web.Mvc.Ajax.AjaxOptions,System.Collections.Generic.IDictionary{System.String,System.Object})"> + <summary> + Returns an anchor tag containing the virtual path for the specified route values such that when the link is clicked, + a request is made to the virtual path asynchronously via javascript. + </summary> + <param name="ajaxHelper"></param> + <param name="linkText">The inner text of the anchor tag</param> + <param name="routeName">The name of the route to used to obtain the form post url.</param> + <param name="protocol">The protocol for the URL such as "http" or "https"</param> + <param name="hostName">The host name for the URL</param> + <param name="fragment">The url fragment name (also known as anchor name)</param> + <param name="routeValues">An object containing the parameters for a route.</param> + <param name="ajaxOptions">An object providing options for the asynchronous request</param> + <param name="htmlAttributes">An object containing the html attributes for the element</param> + <returns>An anchor tag</returns> + </member> + <member name="T:System.Web.Mvc.Resources.MvcResources"> + <summary> + A strongly-typed resource class, for looking up localized strings, etc. + </summary> + </member> + <member name="P:System.Web.Mvc.Resources.MvcResources.ResourceManager"> + <summary> + Returns the cached ResourceManager instance used by this class. + </summary> + </member> + <member name="P:System.Web.Mvc.Resources.MvcResources.Culture"> + <summary> + Overrides the current thread's CurrentUICulture property for all + resource lookups using this strongly typed resource class. + </summary> + </member> + <member name="P:System.Web.Mvc.Resources.MvcResources.ActionMethodSelector_AmbiguousMatch"> + <summary> + Looks up a localized string similar to The current request for action '{0}' on controller type '{1}' is ambiguous between the following action methods:{2}. + </summary> + </member> + <member name="P:System.Web.Mvc.Resources.MvcResources.ActionMethodSelector_AmbiguousMatchType"> + <summary> + Looks up a localized string similar to {0} on type {1}. + </summary> + </member> + <member name="P:System.Web.Mvc.Resources.MvcResources.ActionRedirectResult_NoRouteMatched"> + <summary> + Looks up a localized string similar to No route in the route table matches the supplied values.. + </summary> + </member> + <member name="P:System.Web.Mvc.Resources.MvcResources.AntiForgeryToken_ValidationFailed"> + <summary> + Looks up a localized string similar to A required anti-forgery token was not supplied or was invalid.. + </summary> + </member> + <member name="P:System.Web.Mvc.Resources.MvcResources.Common_InvalidEnumValue"> + <summary> + Looks up a localized string similar to The value '{0}' is outside the valid range of the enumeration type '{1}'.. + </summary> + </member> + <member name="P:System.Web.Mvc.Resources.MvcResources.Common_NullOrEmpty"> + <summary> + Looks up a localized string similar to Value cannot be null or empty.. + </summary> + </member> + <member name="P:System.Web.Mvc.Resources.MvcResources.Common_PartialViewNotFound"> + <summary> + Looks up a localized string similar to The partial view '{0}' could not be found. The following locations were searched:{1}. + </summary> + </member> + <member name="P:System.Web.Mvc.Resources.MvcResources.Common_PropertyCannotBeNullOrEmpty"> + <summary> + Looks up a localized string similar to The property '{0}' cannot be null or empty.. + </summary> + </member> + <member name="P:System.Web.Mvc.Resources.MvcResources.Common_ValueNotValidForProperty"> + <summary> + Looks up a localized string similar to The value '{0}' is invalid.. + </summary> + </member> + <member name="P:System.Web.Mvc.Resources.MvcResources.Common_ViewNotFound"> + <summary> + Looks up a localized string similar to The view '{0}' or its master could not be found. The following locations were searched:{1}. + </summary> + </member> + <member name="P:System.Web.Mvc.Resources.MvcResources.Controller_UnknownAction"> + <summary> + Looks up a localized string similar to A public action method '{0}' could not be found on controller '{1}'.. + </summary> + </member> + <member name="P:System.Web.Mvc.Resources.MvcResources.Controller_UpdateModel_UpdateUnsuccessful"> + <summary> + Looks up a localized string similar to The model of type '{0}' was not successfully updated.. + </summary> + </member> + <member name="P:System.Web.Mvc.Resources.MvcResources.ControllerBuilder_ErrorCreatingControllerFactory"> + <summary> + Looks up a localized string similar to There was an error creating the IControllerFactory '{0}'. Check that it has a public parameterless constructor.. + </summary> + </member> + <member name="P:System.Web.Mvc.Resources.MvcResources.ControllerBuilder_FactoryReturnedNull"> + <summary> + Looks up a localized string similar to The IControllerFactory '{0}' did not return a controller for a controller named '{1}'.. + </summary> + </member> + <member name="P:System.Web.Mvc.Resources.MvcResources.ControllerBuilder_MissingIControllerFactory"> + <summary> + Looks up a localized string similar to The controller factory type '{0}' must implement the IControllerFactory interface.. + </summary> + </member> + <member name="P:System.Web.Mvc.Resources.MvcResources.DefaultControllerFactory_ControllerNameAmbiguous"> + <summary> + Looks up a localized string similar to The controller name '{0}' is ambiguous between the following types:{1}. + </summary> + </member> + <member name="P:System.Web.Mvc.Resources.MvcResources.DefaultControllerFactory_ErrorCreatingController"> + <summary> + Looks up a localized string similar to An error occurred while creating a controller of type '{0}'. If the controller doesn't have a controller factory, ensure that it has a parameterless public constructor.. + </summary> + </member> + <member name="P:System.Web.Mvc.Resources.MvcResources.DefaultControllerFactory_NoControllerFound"> + <summary> + Looks up a localized string similar to The controller for path '{0}' could not be found or it does not implement IController.. + </summary> + </member> + <member name="P:System.Web.Mvc.Resources.MvcResources.DefaultControllerFactory_TypeDoesNotSubclassControllerBase"> + <summary> + Looks up a localized string similar to The controller type '{0}' must implement IController.. + </summary> + </member> + <member name="P:System.Web.Mvc.Resources.MvcResources.DefaultModelBinder_ValueRequired"> + <summary> + Looks up a localized string similar to A value is required.. + </summary> + </member> + <member name="P:System.Web.Mvc.Resources.MvcResources.DefaultViewLocationCache_NegativeTimeSpan"> + <summary> + Looks up a localized string similar to The total number of ticks for the TimeSpan must be greater than 0.. + </summary> + </member> + <member name="P:System.Web.Mvc.Resources.MvcResources.ExceptionViewAttribute_NonExceptionType"> + <summary> + Looks up a localized string similar to The type '{0}' does not inherit from Exception.. + </summary> + </member> + <member name="P:System.Web.Mvc.Resources.MvcResources.FilterAttribute_OrderOutOfRange"> + <summary> + Looks up a localized string similar to Order must be greater than or equal to -1.. + </summary> + </member> + <member name="P:System.Web.Mvc.Resources.MvcResources.HtmlHelper_MissingSelectData"> + <summary> + Looks up a localized string similar to There is no ViewData item with the key '{0}' of type '{1}'.. + </summary> + </member> + <member name="P:System.Web.Mvc.Resources.MvcResources.HtmlHelper_TextAreaParameterOutOfRange"> + <summary> + Looks up a localized string similar to The value must be greater than or equal to zero.. + </summary> + </member> + <member name="P:System.Web.Mvc.Resources.MvcResources.HtmlHelper_WrongSelectDataType"> + <summary> + Looks up a localized string similar to The ViewData item with the key '{0}' is of type '{1}' but needs to be of type '{2}'.. + </summary> + </member> + <member name="P:System.Web.Mvc.Resources.MvcResources.ModelBinderAttribute_ErrorCreatingModelBinder"> + <summary> + Looks up a localized string similar to There was an error creating the IModelBinder '{0}'. Check that it has a public parameterless constructor.. + </summary> + </member> + <member name="P:System.Web.Mvc.Resources.MvcResources.ModelBinderAttribute_TypeNotIModelBinder"> + <summary> + Looks up a localized string similar to The type '{0}' does not implement the IModelBinder interface.. + </summary> + </member> + <member name="P:System.Web.Mvc.Resources.MvcResources.ModelBinderDictionary_MultipleAttributes"> + <summary> + Looks up a localized string similar to The type '{0}' contains multiple attributes inheriting from CustomModelBinderAttribute.. + </summary> + </member> + <member name="P:System.Web.Mvc.Resources.MvcResources.ReflectedActionDescriptor_CannotCallInstanceMethodOnNonControllerType"> + <summary> + Looks up a localized string similar to Cannot create a descriptor for instance method '{0}' on type '{1}' since the type does not subclass ControllerBase.. + </summary> + </member> + <member name="P:System.Web.Mvc.Resources.MvcResources.ReflectedActionDescriptor_CannotCallMethodsWithOutOrRefParameters"> + <summary> + Looks up a localized string similar to Cannot call action method '{0}' on controller '{1}' since the parameter '{2}' is passed by reference.. + </summary> + </member> + <member name="P:System.Web.Mvc.Resources.MvcResources.ReflectedActionDescriptor_CannotCallOpenGenericMethods"> + <summary> + Looks up a localized string similar to Cannot call action method '{0}' on controller '{1}' since it is a generic method.. + </summary> + </member> + <member name="P:System.Web.Mvc.Resources.MvcResources.ReflectedActionDescriptor_ParameterCannotBeNull"> + <summary> + Looks up a localized string similar to The parameters dictionary contains a null entry for parameter '{0}' of non-nullable type '{1}' for method '{2}' in '{3}'. To make a parameter optional its type should be either a reference type or a Nullable type.. + </summary> + </member> + <member name="P:System.Web.Mvc.Resources.MvcResources.ReflectedActionDescriptor_ParameterNotInDictionary"> + <summary> + Looks up a localized string similar to The parameters dictionary does not contain an entry for parameter '{0}' of type '{1}' for method '{2}' in '{3}'. The dictionary must contain an entry for each parameter, even parameters with null values.. + </summary> + </member> + <member name="P:System.Web.Mvc.Resources.MvcResources.ReflectedActionDescriptor_ParameterValueHasWrongType"> + <summary> + Looks up a localized string similar to The parameters dictionary contains an invalid entry for parameter '{0}' for method '{1}' in '{2}'. The dictionary contains a value of type '{3}', but the parameter requires a value of type '{4}'.. + </summary> + </member> + <member name="P:System.Web.Mvc.Resources.MvcResources.ReflectedParameterBindingInfo_MultipleConverterAttributes"> + <summary> + Looks up a localized string similar to The parameter '{0}' on method '{1}' contains multiple attributes inheriting from CustomModelBinderAttribute.. + </summary> + </member> + <member name="P:System.Web.Mvc.Resources.MvcResources.SessionStateTempDataProvider_SessionStateDisabled"> + <summary> + Looks up a localized string similar to The SessionStateTempDataProvider requires SessionState to be enabled.. + </summary> + </member> + <member name="P:System.Web.Mvc.Resources.MvcResources.ValueProviderResult_ConversionThrew"> + <summary> + Looks up a localized string similar to The parameter conversion from type '{0}' to type '{1}' failed. See the inner exception for more information.. + </summary> + </member> + <member name="P:System.Web.Mvc.Resources.MvcResources.ValueProviderResult_NoConverterExists"> + <summary> + Looks up a localized string similar to The parameter conversion from type '{0}' to type '{1}' failed because no TypeConverter can convert between these types.. + </summary> + </member> + <member name="P:System.Web.Mvc.Resources.MvcResources.ViewDataDictionary_WrongTModelType"> + <summary> + Looks up a localized string similar to The model item passed into the dictionary is of type '{0}' but this dictionary requires a model item of type '{1}'.. + </summary> + </member> + <member name="P:System.Web.Mvc.Resources.MvcResources.ViewMasterPage_RequiresViewPage"> + <summary> + Looks up a localized string similar to A ViewMasterPage can only be used with content pages that derive from ViewPage or ViewPage<TViewItem>.. + </summary> + </member> + <member name="P:System.Web.Mvc.Resources.MvcResources.ViewUserControl_RequiresViewDataProvider"> + <summary> + Looks up a localized string similar to The ViewUserControl '{0}' cannot find an IViewDataContainer. The ViewUserControl must be inside a ViewPage, ViewMasterPage, or another ViewUserControl.. + </summary> + </member> + <member name="P:System.Web.Mvc.Resources.MvcResources.ViewUserControl_RequiresViewPage"> + <summary> + Looks up a localized string similar to A ViewUserControl can only be used inside pages that derive from ViewPage or ViewPage<TViewItem>.. + </summary> + </member> + <member name="P:System.Web.Mvc.Resources.MvcResources.WebFormViewEngine_UserControlCannotHaveMaster"> + <summary> + Looks up a localized string similar to A master name cannot be specified when the view is a ViewUserControl.. + </summary> + </member> + <member name="P:System.Web.Mvc.Resources.MvcResources.WebFormViewEngine_ViewCouldNotBeCreated"> + <summary> + Looks up a localized string similar to The view found at '{0}' could not be created.. + </summary> + </member> + <member name="P:System.Web.Mvc.Resources.MvcResources.WebFormViewEngine_WrongViewBase"> + <summary> + Looks up a localized string similar to The view at '{0}' must derive from ViewPage, ViewPage<TViewData>, ViewUserControl, or ViewUserControl<TViewData>.. + </summary> + </member> + <member name="M:System.Web.Mvc.ViewPage.InitHelpers"> + <summary> + Instantiates and initializes the Ajax, Html, and Url properties. + </summary> + </member> + <member name="M:System.Web.Mvc.ViewPage.RenderView(System.Web.Mvc.ViewContext)"> + <summary> + Renders the view page to the response. + </summary> + <param name="viewContext"></param> + </member> + <member name="P:System.Web.Mvc.ViewPage.Ajax"> + <summary> + Returns an <see cref="T:System.Web.Mvc.AjaxHelper"/> containing methods useful for AJAX scenarios. + </summary> + </member> + <member name="P:System.Web.Mvc.ViewPage.Html"> + <summary> + Returns an <see cref="T:System.Web.Mvc.HtmlHelper"/> containing methods useful for rendering HTML elements. + </summary> + </member> + <member name="P:System.Web.Mvc.ViewPage.Model"> + <summary> + Convenience property used to access the Model property of the <see cref="T:System.Web.Mvc.ViewDataDictionary"/> + </summary> + </member> + <member name="M:System.Web.Mvc.Controller.Content(System.String)"> + <summary> + Returns a <see cref="T:System.Web.Mvc.ContentResult"/> which renders the supplied content to the response. + </summary> + <param name="content">The content to write to the response</param> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.Controller.Content(System.String,System.String)"> + <summary> + Returns a <see cref="T:System.Web.Mvc.ContentResult"/> which renders the supplied content to the response. + </summary> + <param name="content">The content to write to the response</param> + <param name="contentType">The content type</param> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.Controller.Content(System.String,System.String,System.Text.Encoding)"> + <summary> + Returns a <see cref="T:System.Web.Mvc.ContentResult"/> which renders the supplied content to the response. + </summary> + <param name="content">The content to write to the response</param> + <param name="contentType">The content type</param> + <param name="contentEncoding">The content encoding</param> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.Controller.File(System.Byte[],System.String)"> + <summary> + Returns a <see cref="T:System.Web.Mvc.FileContentResult"/> which writes the fileContents to the Response. + </summary> + <param name="fileContents">The binary content to send to the response.</param> + <param name="contentType">The content type.</param> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.Controller.File(System.Byte[],System.String,System.String)"> + <summary> + Returns a <see cref="T:System.Web.Mvc.FileContentResult"/> which writes the fileContents to the Response. + </summary> + <param name="fileContents">The binary content to send to the response.</param> + <param name="contentType">The content type.</param> + <param name="fileDownloadName">If specified, sets the content-disposition header so that a file download dialog appears in the browesr with the specified file name</param> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.Controller.File(System.IO.Stream,System.String)"> + <summary> + Returns a <see cref="T:System.Web.Mvc.FileStreamResult"/> which writes the fileStream to the Response. + </summary> + <param name="fileStream">The stream to send to the response.</param> + <param name="contentType">The content type</param> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.Controller.File(System.IO.Stream,System.String,System.String)"> + <summary> + Returns a <see cref="T:System.Web.Mvc.FileStreamResult"/> which writes the fileStream to the Response. + </summary> + <param name="fileStream">The stream to send to the response.</param> + <param name="contentType">The content type</param> + <param name="fileDownloadName">If specified, sets the content-disposition header so that a file download dialog appears in the browesr with the specified file name</param> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.Controller.File(System.String,System.String)"> + <summary> + Returns a <see cref="T:System.Web.Mvc.FilePathResult"/> which writes the file to the Response. + </summary> + <param name="fileName">The path to the file to send to the response.</param> + <param name="contentType">The content type</param> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.Controller.File(System.String,System.String,System.String)"> + <summary> + Returns a <see cref="T:System.Web.Mvc.FilePathResult"/> which writes the file to the Response. + </summary> + <param name="fileName">The path to the file to send to the response.</param> + <param name="contentType">The content type</param> + <param name="fileDownloadName">If specified, sets the content-disposition header so that a file download dialog appears in the browesr with the specified file name</param> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.Controller.HandleUnknownAction(System.String)"> + <summary> + Method called whenever a request matches this controller, but not an action of this controller. + </summary> + <param name="actionName">The name of the attempted action</param> + </member> + <member name="M:System.Web.Mvc.Controller.JavaScript(System.String)"> + <summary> + Returns a <see cref="T:System.Web.Mvc.JavaScriptResult"/> which writes a script to the response + which is then executed on the client. + </summary> + <param name="script">The JavaScript code to run on the client</param> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.Controller.Json(System.Object)"> + <summary> + Returns a <see cref="!:System.Web.Mvc.JSonResult"/> which serializes the specified object to + JSON and writes the JSON to the response. + </summary> + <param name="script">The JavaScript code to run on the client</param> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.Controller.Json(System.Object,System.String)"> + <summary> + Returns a <see cref="!:System.Web.Mvc.JSonResult"/> which serializes the specified object to + JSON and writes the JSON to the response. + </summary> + <param name="script">The JavaScript code to run on the client</param> + <param name="contentType">The content type</param> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.Controller.Json(System.Object,System.String,System.Text.Encoding)"> + <summary> + Returns a <see cref="!:System.Web.Mvc.JSonResult"/> which serializes the specified object to + JSON and writes the JSON to the response. + </summary> + <param name="script">The JavaScript code to run on the client</param> + <param name="contentType">The content type</param> + <param name="contentEncoding">The content encoding</param> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.Controller.OnActionExecuting(System.Web.Mvc.ActionExecutingContext)"> + <summary> + Method called before the action method is invoked. + </summary> + <param name="filterContext">Contains information about the current request and action</param> + </member> + <member name="M:System.Web.Mvc.Controller.OnActionExecuted(System.Web.Mvc.ActionExecutedContext)"> + <summary> + Method called after the action method is invoked. + </summary> + <param name="filterContext">Contains information about the current request and action</param> + </member> + <member name="M:System.Web.Mvc.Controller.OnAuthorization(System.Web.Mvc.AuthorizationContext)"> + <summary> + Method called when authorization occurs. + </summary> + <param name="filterContext">Contains information about the current request and action</param> + </member> + <member name="M:System.Web.Mvc.Controller.OnException(System.Web.Mvc.ExceptionContext)"> + <summary> + Method called when an unhandled exception occurs in the action. + </summary> + <param name="filterContext">Contains information about the current request and action</param> + </member> + <member name="M:System.Web.Mvc.Controller.OnResultExecuted(System.Web.Mvc.ResultExecutedContext)"> + <summary> + Method called after the action result returned by an action method is executed. + </summary> + <param name="filterContext">Contains information about the current request and action result</param> + </member> + <member name="M:System.Web.Mvc.Controller.OnResultExecuting(System.Web.Mvc.ResultExecutingContext)"> + <summary> + Method called before the action result returned by an action method is executed. + </summary> + <param name="filterContext">Contains information about the current request and action result</param> + </member> + <member name="M:System.Web.Mvc.Controller.PartialView"> + <summary> + Returns a <see cref="T:System.Web.Mvc.PartialViewResult"/> which renders a partial view to the response. + </summary> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.Controller.PartialView(System.Object)"> + <summary> + Returns a <see cref="T:System.Web.Mvc.PartialViewResult"/> which renders a partial view to the response. + </summary> + <param name="model">The model rendered by the partial view</param> + </member> + <member name="M:System.Web.Mvc.Controller.PartialView(System.String)"> + <summary> + Returns a <see cref="T:System.Web.Mvc.PartialViewResult"/> which renders a partial view to the response. + </summary> + <param name="name">The name of the partial view</param> + </member> + <member name="M:System.Web.Mvc.Controller.PartialView(System.String,System.Object)"> + <summary> + Returns a <see cref="T:System.Web.Mvc.PartialViewResult"/> which renders a partial view to the response. + </summary> + <param name="name">The name of the partial view</param> + <param name="model">The model rendered by the partial view</param> + </member> + <member name="M:System.Web.Mvc.Controller.Redirect(System.String)"> + <summary> + Returns a <see cref="T:System.Web.Mvc.RedirectResult"/> which redirects to the specified URL + </summary> + <param name="url">The URL to redirect to.</param> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.Controller.RedirectToAction(System.String)"> + <summary> + Returns a <see cref="T:System.Web.Mvc.RedirectToRouteResult"/> which redirects to the specified action + </summary> + <param name="actionName">The name of the action.</param> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.Controller.RedirectToAction(System.String,System.Object)"> + <summary> + Returns a <see cref="T:System.Web.Mvc.RedirectToRouteResult"/> which redirects to the specified action + </summary> + <param name="actionName">The name of the action.</param> + <param name="routeValues">An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax.</param> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.Controller.RedirectToAction(System.String,System.Web.Routing.RouteValueDictionary)"> + <summary> + Returns a <see cref="T:System.Web.Mvc.RedirectToRouteResult"/> which redirects to the specified action + </summary> + <param name="actionName">The name of the action.</param> + <param name="routeValues">An object containing the parameters for a route.</param> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.Controller.RedirectToAction(System.String,System.String)"> + <summary> + Returns a <see cref="T:System.Web.Mvc.RedirectToRouteResult"/> which redirects to the specified action + </summary> + <param name="actionName">The name of the action.</param> + <param name="controllerName">The name of the controller</param> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.Controller.RedirectToAction(System.String,System.String,System.Object)"> + <summary> + Returns a <see cref="T:System.Web.Mvc.RedirectToRouteResult"/> which redirects to the specified action + </summary> + <param name="actionName">The name of the action.</param> + <param name="controllerName">The name of the controller</param> + <param name="routeValues">An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax.</param> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.Controller.RedirectToAction(System.String,System.String,System.Web.Routing.RouteValueDictionary)"> + <summary> + Returns a <see cref="T:System.Web.Mvc.RedirectToRouteResult"/> which redirects to the specified action + </summary> + <param name="actionName">The name of the action.</param> + <param name="controllerName">The name of the controller</param> + <param name="routeValues">An object containing the parameters for a route.</param> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.Controller.RedirectToRoute(System.Object)"> + <summary> + Returns a <see cref="T:System.Web.Mvc.RedirectToRouteResult"/> which redirects to the specified route + </summary> + <param name="routeValues">An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax.</param> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.Controller.RedirectToRoute(System.Web.Routing.RouteValueDictionary)"> + <summary> + Returns a <see cref="T:System.Web.Mvc.RedirectToRouteResult"/> which redirects to the specified route + </summary> + <param name="routeValues">An object containing the parameters for a route.</param> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.Controller.RedirectToRoute(System.String)"> + <summary> + Returns a <see cref="T:System.Web.Mvc.RedirectToRouteResult"/> which redirects to the specified route + </summary> + <param name="routeName">The name of the route</param> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.Controller.RedirectToRoute(System.String,System.Object)"> + <summary> + Returns a <see cref="T:System.Web.Mvc.RedirectToRouteResult"/> which redirects to the specified route + </summary> + <param name="routeName">The name of the route</param> + <param name="routeValues">An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax.</param> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.Controller.RedirectToRoute(System.String,System.Web.Routing.RouteValueDictionary)"> + <summary> + Returns a <see cref="T:System.Web.Mvc.RedirectToRouteResult"/> which redirects to the specified route + </summary> + <param name="routeName">The name of the route</param> + <param name="routeValues">An object containing the parameters for a route.</param> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.Controller.TryUpdateModel``1(``0)"> + <summary> + Updates the specified model instance using values from the Controller's current ValueProvider. + Returns true if successful. + </summary> + <typeparam name="TModel">The type of the model object</typeparam> + <param name="model">The model instance to update.</param> + </member> + <member name="M:System.Web.Mvc.Controller.TryUpdateModel``1(``0,System.String)"> + <summary> + Updates the specified model instance using values from the Controller's current ValueProvider. + Returns true if successful. + </summary> + <typeparam name="TModel">The type of the model object</typeparam> + <param name="model">The model instance to update.</param> + <param name="prefix">Prefix to use when looking up values in the value provider</param> + </member> + <member name="M:System.Web.Mvc.Controller.TryUpdateModel``1(``0,System.String[])"> + <summary> + Updates the specified model instance using values from the Controller's current ValueProvider. + Returns true if successful. + </summary> + <typeparam name="TModel">The type of the model object</typeparam> + <param name="model">The model instance to update.</param> + <param name="includeProperties">List of properties of the model to update</param> + </member> + <member name="M:System.Web.Mvc.Controller.TryUpdateModel``1(``0,System.String,System.String[])"> + <summary> + Updates the specified model instance using values from the Controller's current ValueProvider. + Returns true if successful. + </summary> + <typeparam name="TModel">The type of the model object</typeparam> + <param name="model">The model instance to update.</param> + <param name="includeProperties">List of properties of the model to update</param> + <param name="prefix">Prefix to use when looking up values in the value provider</param> + </member> + <member name="M:System.Web.Mvc.Controller.TryUpdateModel``1(``0,System.String,System.String[],System.String[])"> + <summary> + Updates the specified model instance using values from the Controller's current ValueProvider. + Returns true if successful. + </summary> + <typeparam name="TModel">The type of the model object</typeparam> + <param name="model">The model instance to update.</param> + <param name="prefix">Prefix to use when looking up values in the value provider</param> + <param name="includeProperties">List of properties of the model to update</param> + <param name="excludeProperties">List of properties to explicitly exclude from update. These are excluded even if they are listed in the includeProperties list</param> + </member> + <member name="M:System.Web.Mvc.Controller.TryUpdateModel``1(``0,System.Collections.Generic.IDictionary{System.String,System.Web.Mvc.ValueProviderResult})"> + <summary> + Updates the specified model instance using values from the Controller's current ValueProvider. + Returns true if successful. + </summary> + <typeparam name="TModel">The type of the model object</typeparam> + <param name="model">The model instance to update.</param> + <param name="valueProvider">A dictionary of values used to update the model</param> + </member> + <member name="M:System.Web.Mvc.Controller.TryUpdateModel``1(``0,System.String,System.Collections.Generic.IDictionary{System.String,System.Web.Mvc.ValueProviderResult})"> + <summary> + Updates the specified model instance using values from the Controller's current ValueProvider. + Returns true if successful. + </summary> + <typeparam name="TModel">The type of the model object</typeparam> + <param name="model">The model instance to update.</param> + <param name="prefix">Prefix to use when looking up values in the value provider</param> + <param name="valueProvider">A dictionary of values used to update the model</param> + </member> + <member name="M:System.Web.Mvc.Controller.TryUpdateModel``1(``0,System.String[],System.Collections.Generic.IDictionary{System.String,System.Web.Mvc.ValueProviderResult})"> + <summary> + Updates the specified model instance using values from the Controller's current ValueProvider. + Returns true if successful. + </summary> + <typeparam name="TModel">The type of the model object</typeparam> + <param name="model">The model instance to update.</param> + <param name="includeProperties">List of properties of the model to update</param> + <param name="valueProvider">A dictionary of values used to update the model</param> + </member> + <member name="M:System.Web.Mvc.Controller.TryUpdateModel``1(``0,System.String,System.String[],System.Collections.Generic.IDictionary{System.String,System.Web.Mvc.ValueProviderResult})"> + <summary> + Updates the specified model instance using values from the Controller's current ValueProvider. + Returns true if successful. + </summary> + <typeparam name="TModel">The type of the model object</typeparam> + <param name="model">The model instance to update.</param> + <param name="prefix">Prefix to use when looking up values in the value provider</param> + <param name="includeProperties">List of properties of the model to update</param> + <param name="valueProvider">A dictionary of values used to update the model</param> + </member> + <member name="M:System.Web.Mvc.Controller.TryUpdateModel``1(``0,System.String,System.String[],System.String[],System.Collections.Generic.IDictionary{System.String,System.Web.Mvc.ValueProviderResult})"> + <summary> + Updates the specified model instance using values from the Controller's current ValueProvider. + Returns true if successful. + </summary> + <typeparam name="TModel">The type of the model object</typeparam> + <param name="model">The model instance to update.</param> + <param name="prefix">Prefix to use when looking up values in the value provider</param> + <param name="includeProperties">List of properties of the model to update</param> + <param name="excludeProperties">List of properties to explicitly exclude from update. These are excluded even if they are listed in the includeProperties list</param> + <param name="valueProvider">A dictionary of values used to update the model</param> + </member> + <member name="M:System.Web.Mvc.Controller.UpdateModel``1(``0)"> + <summary> + Updates the specified model instance using values from the Controller's current ValueProvider. + </summary> + <typeparam name="TModel">The type of the model object</typeparam> + <param name="model">The model instance to update.</param> + </member> + <member name="M:System.Web.Mvc.Controller.UpdateModel``1(``0,System.String)"> + <summary> + Updates the specified model instance using values from the Controller's current ValueProvider. + </summary> + <typeparam name="TModel">The type of the model object</typeparam> + <param name="model">The model instance to update.</param> + <param name="prefix">Prefix to use when looking up values in the value provider</param> + </member> + <member name="M:System.Web.Mvc.Controller.UpdateModel``1(``0,System.String[])"> + <summary> + Updates the specified model instance using values from the Controller's current ValueProvider. + </summary> + <typeparam name="TModel">The type of the model object</typeparam> + <param name="model">The model instance to update.</param> + <param name="includeProperties">List of properties of the model to update</param> + </member> + <member name="M:System.Web.Mvc.Controller.UpdateModel``1(``0,System.String,System.String[])"> + <summary> + Updates the specified model instance using values from the Controller's current ValueProvider. + </summary> + <typeparam name="TModel">The type of the model object</typeparam> + <param name="model">The model instance to update.</param> + <param name="prefix">Prefix to use when looking up values in the value provider</param> + <param name="includeProperties">List of properties of the model to update</param> + </member> + <member name="M:System.Web.Mvc.Controller.UpdateModel``1(``0,System.String,System.String[],System.String[])"> + <summary> + Updates the specified model instance using values from the Controller's current ValueProvider. + </summary> + <typeparam name="TModel">The type of the model object</typeparam> + <param name="model">The model instance to update.</param> + <param name="prefix">Prefix to use when looking up values in the value provider</param> + <param name="includeProperties">List of properties of the model to update</param> + <param name="excludeProperties">List of properties to explicitly exclude from update. These are excluded even if they are listed in the includeProperties list</param> + </member> + <member name="M:System.Web.Mvc.Controller.UpdateModel``1(``0,System.Collections.Generic.IDictionary{System.String,System.Web.Mvc.ValueProviderResult})"> + <summary> + Updates the specified model instance using values from the Controller's current ValueProvider. + </summary> + <typeparam name="TModel">The type of the model object</typeparam> + <param name="model">The model instance to update.</param> + <param name="valueProvider">A dictionary of values used to update the model</param> + </member> + <member name="M:System.Web.Mvc.Controller.UpdateModel``1(``0,System.String,System.Collections.Generic.IDictionary{System.String,System.Web.Mvc.ValueProviderResult})"> + <summary> + Updates the specified model instance using values from the Controller's current ValueProvider. + </summary> + <typeparam name="TModel">The type of the model object</typeparam> + <param name="model">The model instance to update.</param> + <param name="prefix">Prefix to use when looking up values in the value provider</param> + <param name="valueProvider">A dictionary of values used to update the model</param> + </member> + <member name="M:System.Web.Mvc.Controller.UpdateModel``1(``0,System.String[],System.Collections.Generic.IDictionary{System.String,System.Web.Mvc.ValueProviderResult})"> + <summary> + Updates the specified model instance using values from the Controller's current ValueProvider. + </summary> + <typeparam name="TModel">The type of the model object</typeparam> + <param name="model">The model instance to update.</param> + <param name="includeProperties">List of properties of the model to update</param> + <param name="valueProvider">A dictionary of values used to update the model</param> + </member> + <member name="M:System.Web.Mvc.Controller.UpdateModel``1(``0,System.String,System.String[],System.Collections.Generic.IDictionary{System.String,System.Web.Mvc.ValueProviderResult})"> + <summary> + Updates the specified model instance using values from the Controller's current ValueProvider. + </summary> + <typeparam name="TModel">The type of the model object</typeparam> + <param name="model">The model instance to update.</param> + <param name="prefix">Prefix to use when looking up values in the value provider</param> + <param name="includeProperties">List of properties of the model to update</param> + <param name="valueProvider">A dictionary of values used to update the model</param> + </member> + <member name="M:System.Web.Mvc.Controller.UpdateModel``1(``0,System.String,System.String[],System.String[],System.Collections.Generic.IDictionary{System.String,System.Web.Mvc.ValueProviderResult})"> + <summary> + Updates the specified model instance using values from the Controller's current ValueProvider. + </summary> + <typeparam name="TModel">The type of the model object</typeparam> + <param name="model">The model instance to update.</param> + <param name="prefix">Prefix to use when looking up values in the value provider</param> + <param name="includeProperties">List of properties of the model to update</param> + <param name="excludeProperties">List of properties to explicitly exclude from update. These are excluded even if they are listed in the includeProperties list</param> + <param name="valueProvider">A dictionary of values used to update the model</param> + </member> + <member name="M:System.Web.Mvc.Controller.View"> + <summary> + Returns a <see cref="T:System.Web.Mvc.ViewResult"/> which renders a view to the response. + </summary> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.Controller.View(System.Object)"> + <summary> + Returns a <see cref="T:System.Web.Mvc.ViewResult"/> which renders a view to the response. + </summary> + <param name="model">The model rendered by the view</param> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.Controller.View(System.String)"> + <summary> + Returns a <see cref="T:System.Web.Mvc.ViewResult"/> which renders a view to the response. + </summary> + <param name="viewName">The name of the partial view</param> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.Controller.View(System.String,System.String)"> + <summary> + Returns a <see cref="T:System.Web.Mvc.ViewResult"/> which renders a view to the response. + </summary> + <param name="viewName">The name of the view</param> + <param name="masterName">The name of the master view</param> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.Controller.View(System.String,System.Object)"> + <summary> + Returns a <see cref="T:System.Web.Mvc.ViewResult"/> which renders a view to the response. + </summary> + <param name="viewName">The name of the view</param> + <param name="model">The model rendered by the view</param> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.Controller.View(System.String,System.String,System.Object)"> + <summary> + Returns a <see cref="T:System.Web.Mvc.ViewResult"/> which renders a view to the response. + </summary> + <param name="viewName">The name of the view</param> + <param name="masterName">The name of the master view</param> + <param name="model">The model rendered by the view</param> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.Controller.View(System.Web.Mvc.IView)"> + <summary> + Returns a <see cref="T:System.Web.Mvc.ViewResult"/> which renders the specified <see cref="T:System.Web.Mvc.IView"/> to the response. + </summary> + <param name="view">The view rendered to the response</param> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.Controller.View(System.Web.Mvc.IView,System.Object)"> + <summary> + Returns a <see cref="T:System.Web.Mvc.ViewResult"/> which renders the specified <see cref="T:System.Web.Mvc.IView"/> to the response. + </summary> + <param name="view">The view rendered to the response</param> + <param name="model">The model rendered by the view</param> + <returns></returns> + </member> + <member name="P:System.Web.Mvc.Controller.ActionInvoker"> + <summary> + Gets the <see cref="T:System.Web.Mvc.IActionInvoker"/> for the controller. + </summary> + </member> + <member name="P:System.Web.Mvc.Controller.HttpContext"> + <summary> + Encapsulates all HTTP-specific information about an individual HTTP request. + </summary> + </member> + <member name="P:System.Web.Mvc.Controller.ModelState"> + <summary> + Gets the <see cref="T:System.Web.Mvc.ModelStateDictionary"/> object containing the + state of the model and model binding validation. + </summary> + </member> + <member name="P:System.Web.Mvc.Controller.Request"> + <summary> + Gets the <see cref="T:System.Web.HttpRequestBase"/> object for the current HTTP request. + </summary> + </member> + <member name="P:System.Web.Mvc.Controller.Response"> + <summary> + Gets the <see cref="T:System.Web.HttpResponseBase"/> object for the current HTTP request. + </summary> + </member> + <member name="P:System.Web.Mvc.Controller.RouteData"> + <summary> + Returns the <see cref="!:System.Web.RouteData"/> for the current request. + </summary> + </member> + <member name="P:System.Web.Mvc.Controller.Server"> + <summary> + Gets the <see cref="T:System.Web.HttpServerUtilityBase"/> object that provides methods used in processing Web requests. + </summary> + </member> + <member name="P:System.Web.Mvc.Controller.Session"> + <summary> + Gets the <see cref="T:System.Web.HttpSessionStateBase"/> object for the current HTTP request. + </summary> + </member> + <member name="P:System.Web.Mvc.Controller.TempDataProvider"> + <summary> + Gets the <see cref="T:System.Web.Mvc.ITempDataProvider"/> object used to store data for the next request. + </summary> + </member> + <member name="P:System.Web.Mvc.Controller.Url"> + <summary> + Gets the <see cref="T:System.Web.Mvc.UrlHelper"/> object used to generate URLs using Routing. + </summary> + </member> + <member name="P:System.Web.Mvc.Controller.User"> + <summary> + Gets the security information for the current HTTP request. + </summary> + </member> + <member name="T:System.Web.Mvc.AjaxHelper"> + <summary> + Class containing convenience methods for use in rendering HTML for use in Ajax scenarios within a view. + </summary> + </member> + <member name="P:System.Web.Mvc.AjaxHelper.RouteCollection"> + <summary> + Gets the collection of routes. + </summary> + </member> + <member name="P:System.Web.Mvc.AjaxHelper.ViewContext"> + <summary> + Gets the current <see cref="T:System.Web.Mvc.ViewContext"/>. + </summary> + </member> + <member name="P:System.Web.Mvc.AjaxHelper.ViewData"> + <summary> + Gets the current <see cref="!:System.Web.Mvc.ViewData"/>. + </summary> + </member> + <member name="P:System.Web.Mvc.AjaxHelper.ViewDataContainer"> + <summary> + Gets the current <see cref="!:System.Web.Mvc.ViewDataContainer"/>. + </summary> + </member> + <member name="T:System.Web.Mvc.ViewContext"> + <summary> + Encapsulates information related to rendering a view. + </summary> + </member> + <member name="T:System.Web.Mvc.ControllerContext"> + <summary> + Encapsulates information about an HTTP request that matches a defined <see cref="!:System.Web.RouteBase">Route</see> and <see cref="T:System.Web.Mvc.ControllerBase">Controller</see>. + </summary> + </member> + <member name="P:System.Web.Mvc.ViewContext.TempData"> + <summary> + Gets data associated with this request which only lives for one request. + </summary> + </member> + <member name="P:System.Web.Mvc.ViewContext.View"> + <summary> + Gets the <see cref="T:System.Web.Mvc.IView"/> to render. + </summary> + </member> + <member name="P:System.Web.Mvc.ViewContext.ViewData"> + <summary> + Gets the view data supplied to the view. + </summary> + </member> + <member name="M:System.Web.Mvc.Html.LinkExtensions.ActionLink(System.Web.Mvc.HtmlHelper,System.String,System.String)"> + <summary> + Returns an anchor tag containing the virtual path to the specified action. + </summary> + <param name="linkText">The inner text of the anchor tag</param> + <param name="actionName">The name of the action</param> + <returns>An anchor tag</returns> + </member> + <member name="M:System.Web.Mvc.Html.LinkExtensions.ActionLink(System.Web.Mvc.HtmlHelper,System.String,System.String,System.Object)"> + <summary> + Returns an anchor tag containing the virtual path to the specified action. + </summary> + <param name="linkText">The inner text of the anchor tag</param> + <param name="actionName">The name of the action</param> + <param name="routeValues">An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax.</param> + <returns>An anchor tag</returns> + </member> + <member name="M:System.Web.Mvc.Html.LinkExtensions.ActionLink(System.Web.Mvc.HtmlHelper,System.String,System.String,System.Object,System.Object)"> + <summary> + Returns an anchor tag containing the virtual path to the specified action. + </summary> + <param name="linkText">The inner text of the anchor tag</param> + <param name="actionName">The name of the action</param> + <param name="routeValues">An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax.</param> + <param name="htmlAttributes">An object containing the html attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax</param> + <returns>An anchor tag</returns> + </member> + <member name="M:System.Web.Mvc.Html.LinkExtensions.ActionLink(System.Web.Mvc.HtmlHelper,System.String,System.String,System.Web.Routing.RouteValueDictionary)"> + <summary> + Returns an anchor tag containing the virtual path to the specified action. + </summary> + <param name="linkText">The inner text of the anchor tag</param> + <param name="actionName">The name of the action</param> + <param name="routeValues">An object containing the parameters for a route</param> + <returns>An anchor tag</returns> + </member> + <member name="M:System.Web.Mvc.Html.LinkExtensions.ActionLink(System.Web.Mvc.HtmlHelper,System.String,System.String,System.Web.Routing.RouteValueDictionary,System.Collections.Generic.IDictionary{System.String,System.Object})"> + <summary> + Returns an anchor tag containing the virtual path to the specified action. + </summary> + <param name="linkText">The inner text of the anchor tag</param> + <param name="actionName">The name of the action</param> + <param name="routeValues">An object containing the parameters for a route</param> + <param name="htmlAttributes">An object containing the html attributes for the element</param> + <returns>An anchor tag</returns> + </member> + <member name="M:System.Web.Mvc.Html.LinkExtensions.ActionLink(System.Web.Mvc.HtmlHelper,System.String,System.String,System.String)"> + <summary> + Returns an anchor tag containing the virtual path to the specified action. + </summary> + <param name="linkText">The inner text of the anchor tag</param> + <param name="actionName">The name of the action</param> + <param name="controllerName">The name of the controller</param> + <returns>An anchor tag</returns> + </member> + <member name="M:System.Web.Mvc.Html.LinkExtensions.ActionLink(System.Web.Mvc.HtmlHelper,System.String,System.String,System.String,System.Object,System.Object)"> + <summary> + Returns an anchor tag containing the virtual path to the specified action. + </summary> + <param name="linkText">The inner text of the anchor tag</param> + <param name="actionName">The name of the action</param> + <param name="controllerName">The name of the controller</param> + <param name="routeValues">An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax.</param> + <param name="htmlAttributes">An object containing the html attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax</param> + <returns>An anchor tag</returns> + </member> + <member name="M:System.Web.Mvc.Html.LinkExtensions.ActionLink(System.Web.Mvc.HtmlHelper,System.String,System.String,System.String,System.Web.Routing.RouteValueDictionary,System.Collections.Generic.IDictionary{System.String,System.Object})"> + <summary> + Returns an anchor tag containing the virtual path to the specified action. + </summary> + <param name="linkText">The inner text of the anchor tag</param> + <param name="actionName">The name of the action</param> + <param name="controllerName">The name of the controller</param> + <param name="routeValues">An object containing the parameters for a route</param> + <param name="htmlAttributes">An object containing the html attributes for the element</param> + <returns>An anchor tag</returns> + </member> + <member name="M:System.Web.Mvc.Html.LinkExtensions.ActionLink(System.Web.Mvc.HtmlHelper,System.String,System.String,System.String,System.String,System.String,System.String,System.Object,System.Object)"> + <summary> + Returns an anchor tag containing the url to the specified action. + </summary> + <param name="linkText">The inner text of the anchor tag</param> + <param name="actionName">The name of the action</param> + <param name="controllerName">The name of the controller</param> + <param name="routeValues">An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax.</param> + <param name="htmlAttributes">An object containing the html attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax</param> + <param name="protocol">The protocol for the URL such as "http" or "https"</param> + <param name="fragment">The url fragment name (also known as anchor name)</param> + <param name="hostName">The host name for the URL</param> + <returns>An anchor tag</returns> + </member> + <member name="M:System.Web.Mvc.Html.LinkExtensions.ActionLink(System.Web.Mvc.HtmlHelper,System.String,System.String,System.String,System.String,System.String,System.String,System.Web.Routing.RouteValueDictionary,System.Collections.Generic.IDictionary{System.String,System.Object})"> + <summary> + Returns an anchor tag containing the url to the specified action. + </summary> + <param name="linkText">The inner text of the anchor tag</param> + <param name="actionName">The name of the action</param> + <param name="controllerName">The name of the controller</param> + <param name="routeValues">An object containing the parameters for a route</param> + <param name="htmlAttributes">An object containing the html attributes for the element</param> + <param name="protocol">The protocol for the URL such as "http" or "https"</param> + <param name="fragment">The url fragment name (also known as anchor name)</param> + <param name="hostName">The host name for the URL</param> + <returns>An anchor tag</returns> + </member> + <member name="M:System.Web.Mvc.Html.LinkExtensions.RouteLink(System.Web.Mvc.HtmlHelper,System.String,System.Object)"> + <summary> + Returns an anchor tag containing the virtual path for the specified route values. + </summary> + <param name="linkText">The inner text of the anchor tag</param> + <param name="routeValues">An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax.</param> + <returns>An anchor tag</returns> + </member> + <member name="M:System.Web.Mvc.Html.LinkExtensions.RouteLink(System.Web.Mvc.HtmlHelper,System.String,System.Web.Routing.RouteValueDictionary)"> + <summary> + Returns an anchor tag containing the virtual path for the specified route values. + </summary> + <param name="linkText">The inner text of the anchor tag</param> + <param name="routeValues">An object containing the parameters for a route</param> + <returns>An anchor tag</returns> + </member> + <member name="M:System.Web.Mvc.Html.LinkExtensions.RouteLink(System.Web.Mvc.HtmlHelper,System.String,System.String,System.Object)"> + <summary> + Returns an anchor tag containing the virtual path for the specified route values. + </summary> + <param name="linkText">The inner text of the anchor tag</param> + <param name="routeName">The name of the route used to return a virtual path.</param> + <param name="routeValues">An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax.</param> + <returns>An anchor tag</returns> + </member> + <member name="M:System.Web.Mvc.Html.LinkExtensions.RouteLink(System.Web.Mvc.HtmlHelper,System.String,System.String,System.Web.Routing.RouteValueDictionary)"> + <summary> + Returns an anchor tag containing the virtual path for the specified route values. + </summary> + <param name="linkText">The inner text of the anchor tag</param> + <param name="routeName">The name of the route used to return a virtual path.</param> + <param name="routeValues">An object containing the parameters for a route</param> + <returns>An anchor tag</returns> + </member> + <member name="M:System.Web.Mvc.Html.LinkExtensions.RouteLink(System.Web.Mvc.HtmlHelper,System.String,System.Object,System.Object)"> + <summary> + Returns an anchor tag containing the virtual path for the specified route values. + </summary> + <param name="linkText">The inner text of the anchor tag</param> + <param name="routeName">The name of the route used to return a virtual path.</param> + <param name="routeValues">An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax.</param> + <param name="htmlAttributes">An object containing the html attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax</param> + <returns>An anchor tag</returns> + </member> + <member name="M:System.Web.Mvc.Html.LinkExtensions.RouteLink(System.Web.Mvc.HtmlHelper,System.String,System.Web.Routing.RouteValueDictionary,System.Collections.Generic.IDictionary{System.String,System.Object})"> + <summary> + Returns an anchor tag containing the virtual path for the specified route values. + </summary> + <param name="linkText">The inner text of the anchor tag</param> + <param name="routeName">The name of the route used to return a virtual path.</param> + <param name="routeValues">An object containing the parameters for a route</param> + <param name="htmlAttributes">An object containing the html attributes for the element</param> + <returns>An anchor tag</returns> + </member> + <member name="M:System.Web.Mvc.Html.LinkExtensions.RouteLink(System.Web.Mvc.HtmlHelper,System.String,System.String,System.Object,System.Object)"> + <summary> + Returns an anchor tag containing the virtual path for the specified route values. + </summary> + <param name="linkText">The inner text of the anchor tag</param> + <param name="routeName">The name of the route used to return a virtual path.</param> + <param name="routeValues">An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax.</param> + <param name="htmlAttributes">An object containing the html attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax</param> + <returns>An anchor tag</returns> + </member> + <member name="M:System.Web.Mvc.Html.LinkExtensions.RouteLink(System.Web.Mvc.HtmlHelper,System.String,System.String,System.Web.Routing.RouteValueDictionary,System.Collections.Generic.IDictionary{System.String,System.Object})"> + <summary> + Returns an anchor tag containing the virtual path for the specified route values. + </summary> + <param name="linkText">The inner text of the anchor tag</param> + <param name="routeName">The name of the route used to return a virtual path.</param> + <param name="routeValues">An object containing the parameters for a route</param> + <param name="htmlAttributes">An object containing the html attributes for the element</param> + <returns>An anchor tag</returns> + </member> + <member name="M:System.Web.Mvc.Html.LinkExtensions.RouteLink(System.Web.Mvc.HtmlHelper,System.String,System.String,System.String,System.String,System.String,System.Object,System.Object)"> + <summary> + Returns an anchor tag containing the url for the specified route values. + </summary> + <param name="linkText">The inner text of the anchor tag</param> + <param name="routeName">The name of the route used to return a virtual path.</param> + <param name="hostName">The host name for the URL</param> + <param name="protocol">The protocol for the URL such as "http" or "https"</param> + <param name="fragment">The url fragment name (also known as anchor name)</param> + <param name="routeValues">An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax.</param> + <param name="htmlAttributes">An object containing the html attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax</param> + <returns>An anchor tag</returns> + </member> + <member name="M:System.Web.Mvc.Html.LinkExtensions.RouteLink(System.Web.Mvc.HtmlHelper,System.String,System.String,System.String,System.String,System.String,System.Web.Routing.RouteValueDictionary,System.Collections.Generic.IDictionary{System.String,System.Object})"> + <summary> + Returns an anchor tag containing the url for the specified route values. + </summary> + <param name="linkText">The inner text of the anchor tag</param> + <param name="routeName">The name of the route used to return a virtual path.</param> + <param name="hostName">The host name for the URL</param> + <param name="protocol">The protocol for the URL such as "http" or "https"</param> + <param name="fragment">The url fragment name (also known as anchor name)</param> + <param name="routeValues">An object containing the parameters for a route</param> + <param name="htmlAttributes">An object containing the html attributes for the element</param> + <returns>An anchor tag</returns> + </member> + <member name="T:System.Web.Mvc.ModelStateDictionary"> + <summary> + Represents the state of an attempt to bind a posted form to an action method including validation information. + </summary> + </member> + <member name="M:System.Web.Mvc.ModelStateDictionary.#ctor"> + <summary> + Initializes a new instance of the <see cref="T:System.Web.Mvc.ModelStateDictionary"/> class + </summary> + </member> + <member name="M:System.Web.Mvc.ModelStateDictionary.#ctor(System.Web.Mvc.ModelStateDictionary)"> + <summary> + Initializes a new instance of the <see cref="T:System.Web.Mvc.ModelStateDictionary"/> class with the values copied + from the the specified ModelStateDictionary. + </summary> + </member> + <member name="M:System.Web.Mvc.ModelStateDictionary.AddModelError(System.String,System.Exception)"> + <summary> + Adds the specified <see cref="T:System.Exception"/> to the errors collection for the <see cref="T:System.Web.Mvc.ModelState"/> + associated with the specified key. + </summary> + <param name="key"></param> + <param name="exception"></param> + </member> + <member name="M:System.Web.Mvc.ModelStateDictionary.AddModelError(System.String,System.String)"> + <summary> + Adds the specified error message to the errors collection for the <see cref="T:System.Web.Mvc.ModelState"/> + associated with the specified key. + </summary> + <param name="key"></param> + <param name="errorMessage"></param> + </member> + <member name="M:System.Web.Mvc.ModelStateDictionary.IsValidField(System.String)"> + <summary> + Returns true if there are any <see cref="T:System.Web.Mvc.ModelError"/> associated or prefixed with the specified key. + </summary> + <param name="key"></param> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.ModelStateDictionary.Merge(System.Web.Mvc.ModelStateDictionary)"> + <summary> + Copies the values from the specified <see cref="T:System.Web.Mvc.ModelStateDictionary"/> into this + dictionary, overwriting existing values in cases where the keys are the same. + </summary> + <param name="dictionary"></param> + </member> + <member name="M:System.Web.Mvc.ModelStateDictionary.SetModelValue(System.String,System.Web.Mvc.ValueProviderResult)"> + <summary> + Sets the value for the specified key using the specified <see cref="T:System.Web.Mvc.ValueProviderResult"/> + </summary> + <param name="key"></param> + <param name="value"></param> + </member> + <member name="P:System.Web.Mvc.ModelStateDictionary.Count"> + <summary> + Gets the number of key/value pairs that are in the collection. + </summary> + </member> + <member name="P:System.Web.Mvc.ModelStateDictionary.IsValid"> + <summary> + Returns true if there are no errors, otherwise false. + </summary> + </member> + <member name="P:System.Web.Mvc.ModelStateDictionary.Keys"> + <summary> + Gets a collection that contains the keys in the dictionary. + </summary> + </member> + <member name="P:System.Web.Mvc.ModelStateDictionary.Item(System.String)"> + <summary> + Gets or sets the value that is associated with the specified key. + </summary> + <param name="key"></param> + <returns></returns> + </member> + <member name="P:System.Web.Mvc.ModelStateDictionary.Values"> + <summary> + Gets a collection that contains the <see cref="T:System.Web.Mvc.ModelState"/> values in the dictionary. + </summary> + </member> + <member name="M:System.Web.Mvc.UrlHelper.#ctor(System.Web.Routing.RequestContext)"> + <summary> + Initializes a new instance of the <see cref="T:System.Web.Mvc.UrlHelper"/> class. + </summary> + <param name="requestContext">An object that contains information about the current request and the defined route it matched.</param> + </member> + <member name="M:System.Web.Mvc.UrlHelper.#ctor(System.Web.Routing.RequestContext,System.Web.Routing.RouteCollection)"> + <summary> + Initializes a new instance of the <see cref="T:System.Web.Mvc.UrlHelper"/> class. + </summary> + <param name="requestContext">An object that contains information about the current request and the defined route it matched.</param> + <param name="routeCollection">A collection of <see cref="N:System.Web.Routing">Route</see> instances.</param> + </member> + <member name="M:System.Web.Mvc.UrlHelper.Action(System.String)"> + <summary> + Returns a virtual path for the specified route values. + </summary> + <param name="actionName">The name of the action</param> + <returns>The virtual path to the action</returns> + </member> + <member name="M:System.Web.Mvc.UrlHelper.Action(System.String,System.Object)"> + <summary> + Returns a virtual path URL for the specified route values. + </summary> + <param name="actionName">The name of the action</param> + <param name="routeValues">An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax.</param> + <returns>The virtual path to the action</returns> + </member> + <member name="M:System.Web.Mvc.UrlHelper.Action(System.String,System.Web.Routing.RouteValueDictionary)"> + <summary> + Returns a virtual path for the specified route values. + </summary> + <param name="actionName">The name of the action</param> + <param name="routeValues">An object containing the parameters for a route.</param> + <returns>The virtual path to the action</returns> + </member> + <member name="M:System.Web.Mvc.UrlHelper.Action(System.String,System.String)"> + <summary> + Returns a virtual path for the specified route values. + </summary> + <param name="actionName">The name of the action</param> + <param name="controllerName">The name of the controller</param> + <returns>The virtual path to the action</returns> + </member> + <member name="M:System.Web.Mvc.UrlHelper.Action(System.String,System.String,System.Object)"> + <summary> + Returns a virtual path for the specified route values. + </summary> + <param name="actionName">The name of the action</param> + <param name="controllerName">The name of the controller</param> + <param name="routeValues">An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax.</param> + <returns>The virtual path to the action</returns> + </member> + <member name="M:System.Web.Mvc.UrlHelper.Action(System.String,System.String,System.Web.Routing.RouteValueDictionary)"> + <summary> + Returns a virtual path for the specified route values. + </summary> + <param name="actionName">The name of the action</param> + <param name="controllerName">The name of the controller</param> + <param name="routeValues">An object containing the parameters for a route.</param> + <param name="protocol">The protocol for the URL such as "http" or "https"</param> + <returns>The virtual path to the action</returns> + </member> + <member name="M:System.Web.Mvc.UrlHelper.Action(System.String,System.String,System.Object,System.String)"> + <summary> + Returns a fully qualified URL for the specified route values. + </summary> + <param name="actionName">The name of the action</param> + <param name="controllerName">The name of the controller</param> + <param name="routeValues">An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax.</param> + <param name="protocol">The protocol for the URL such as "http" or "https"</param> + <returns>The URL to the action</returns> + </member> + <member name="M:System.Web.Mvc.UrlHelper.Action(System.String,System.String,System.Web.Routing.RouteValueDictionary,System.String,System.String)"> + <summary> + Returns a fully qualified URL for the specified route values. + </summary> + <param name="actionName">The name of the action</param> + <param name="controllerName">The name of the controller</param> + <param name="routeValues">An object containing the parameters for a route</param> + <param name="protocol">The protocol for the URL such as "http" or "https"</param> + <param name="hostName">The host name for the URL</param> + <returns>The URL to the action</returns> + </member> + <member name="M:System.Web.Mvc.UrlHelper.Content(System.String)"> + <summary> + Converts a virtual path to an application absolute path. + </summary> + <remarks> + If the specified <paramref name="contentPath"/> does not start with the tilde [~] character, + then this method returns the specified <paramref name="contentPath"/> unchanged. + </remarks> + <param name="contentPath">The virtual path to the content.</param> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.UrlHelper.Encode(System.String)"> + <summary> + Encodes a URL string + </summary> + <param name="url">The text to encode</param> + <returns>An encoded string</returns> + </member> + <member name="M:System.Web.Mvc.UrlHelper.RouteUrl(System.Object)"> + <summary> + Returns a virtual path for the specified route values. + </summary> + <param name="routeValues">An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax.</param> + <returns>A virtual path</returns> + </member> + <member name="M:System.Web.Mvc.UrlHelper.RouteUrl(System.Web.Routing.RouteValueDictionary)"> + <summary> + Returns a virtual path for the specified route values. + </summary> + <param name="routeValues">An object containing the parameters for a route.</param> + <returns>A virtual path</returns> + </member> + <member name="M:System.Web.Mvc.UrlHelper.RouteUrl(System.String)"> + <summary> + Returns a virtual path for the specified route values. + </summary> + <param name="routeName">The name of the route used to return a virtual path.</param> + <returns>A virtual path</returns> + </member> + <member name="M:System.Web.Mvc.UrlHelper.RouteUrl(System.String,System.Object)"> + <summary> + Returns a virtual path for the specified route values. + </summary> + <param name="routeName">The name of the route used to return a virtual path.</param> + <param name="routeValues">An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax.</param> + <returns>A virtual path</returns> + </member> + <member name="M:System.Web.Mvc.UrlHelper.RouteUrl(System.String,System.Web.Routing.RouteValueDictionary)"> + <summary> + Returns a virtual path for the specified route values. + </summary> + <param name="routeName">The name of the route used to return a virtual path.</param> + <param name="routeValues">An object containing the parameters for a route.</param> + <returns>A virtual path</returns> + </member> + <member name="M:System.Web.Mvc.UrlHelper.RouteUrl(System.String,System.Object,System.String)"> + <summary> + Returns a fully qualified URL for the specified route values. + </summary> + <param name="routeName">The name of the route used to return a virtual path.</param> + <param name="routeValues">An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax.</param> + <param name="protocol">The protocol for the URL such as "http" or "https"</param> + <returns>A virtual path</returns> + </member> + <member name="M:System.Web.Mvc.UrlHelper.RouteUrl(System.String,System.Web.Routing.RouteValueDictionary,System.String,System.String)"> + <summary> + Returns a fully qualified URL for the specified route values. + </summary> + <param name="routeName">The name of the route used to generate the virtual path</param> + <param name="controllerName">The name of the controller</param> + <param name="routeValues">An object containing the parameters for a route</param> + <param name="protocol">The protocol for the URL such as "http" or "https"</param> + <param name="hostName">The host name for the URL</param> + <returns>The virtual path to the action</returns> + </member> + <member name="P:System.Web.Mvc.UrlHelper.RequestContext"> + <summary> + Encapsulates information about an HTTP request that matches a defined route. + </summary> + </member> + <member name="P:System.Web.Mvc.UrlHelper.RouteCollection"> + <summary> + A collection containing the routes registered for the application. + </summary> + </member> + <member name="T:System.Web.Mvc.HtmlHelper"> + <summary> + Class containing convenience methods for use in rendering HTML in a view. + </summary> + </member> + <member name="M:System.Web.Mvc.HtmlHelper.AntiForgeryToken"> + <summary> + Returns the string for a hidden input containing a token used to prevent CSRF attacks. + </summary> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.HtmlHelper.AntiForgeryToken(System.String)"> + <summary> + Returns the string for a hidden input containing a token used to prevent CSRF attacks. + </summary> + <param name="salt">A salt to use when generating the token</param> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.HtmlHelper.AttributeEncode(System.String)"> + <summary> + Method used to encode HTML attribute values. + </summary> + <param name="value">The string to encode</param> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.HtmlHelper.AttributeEncode(System.Object)"> + <summary> + Method used to encode HTML attribute values. + </summary> + <param name="value">The object to encode</param> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.HtmlHelper.Encode(System.String)"> + <summary> + Method used to encode HTML. + </summary> + <param name="value">The string to encode</param> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.HtmlHelper.Encode(System.Object)"> + <summary> + Method used to encode HTML. + </summary> + <param name="value">The object to encode</param> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.HtmlHelper.GenerateLink(System.Web.Routing.RequestContext,System.Web.Routing.RouteCollection,System.String,System.String,System.String,System.String,System.Web.Routing.RouteValueDictionary,System.Collections.Generic.IDictionary{System.String,System.Object})"> + <summary> + Convenience method used to generate a link using Routing to determine the virtual path. + </summary> + <param name="requestContext">The current <see cref="!:System.Web.RequestContext"/></param> + <param name="routeCollection">The collection of routes.</param> + <param name="linkText">The text displayed in the link</param> + <param name="routeName">The name of the route, if any.</param> + <param name="actionName">The name of the action.</param> + <param name="controllerName">The name of the controller.</param> + <param name="routeValues">The route values</param> + <param name="htmlAttributes">The html attributes</param> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.HtmlHelper.GenerateLink(System.Web.Routing.RequestContext,System.Web.Routing.RouteCollection,System.String,System.String,System.String,System.String,System.String,System.String,System.String,System.Web.Routing.RouteValueDictionary,System.Collections.Generic.IDictionary{System.String,System.Object})"> + <summary> + Convenience method used to generate a link using Routing to determine the URL. + </summary> + <param name="requestContext">The current <see cref="!:System.Web.RequestContext"/></param> + <param name="routeCollection">The collection of routes.</param> + <param name="linkText">The text displayed in the link</param> + <param name="routeName">The name of the route, if any.</param> + <param name="actionName">The name of the action.</param> + <param name="controllerName">The name of the controller.</param> + <param name="routeValues">The route values</param> + <param name="htmlAttributes">The html attributes</param> + <param name="protocol">The protocol to use, such as http or https.</param> + <param name="hostName">The hostname for the URL</param> + <param name="fragment">The fragment to append to the end of the URL</param> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.HtmlHelper.GetFormMethodString(System.Web.Mvc.FormMethod)"> + <summary> + Convenience method which converts the <see cref="T:System.Web.Mvc.FormMethod"/> value into a string. + </summary> + <param name="method"></param> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.HtmlHelper.GetInputTypeString(System.Web.Mvc.InputType)"> + <summary> + Convenience method for converting the <see cref="T:System.Web.Mvc.InputType"/> value to a string + </summary> + <param name="inputType"></param> + <returns></returns> + </member> + <member name="P:System.Web.Mvc.HtmlHelper.IdAttributeDotReplacement"> + <summary> + Gets or sets the string which replaces the dot character in the ID of html elements generated by HTML helpers. + </summary> + </member> + <member name="P:System.Web.Mvc.HtmlHelper.RouteCollection"> + <summary> + Gets the collection of routes. + </summary> + </member> + <member name="P:System.Web.Mvc.HtmlHelper.ViewContext"> + <summary> + Gets the current <see cref="T:System.Web.Mvc.ViewContext"/>. + </summary> + </member> + <member name="P:System.Web.Mvc.HtmlHelper.ViewData"> + <summary> + Gets the current <see cref="!:System.Web.Mvc.ViewData"/>. + </summary> + </member> + <member name="P:System.Web.Mvc.HtmlHelper.ViewDataContainer"> + <summary> + Gets the current <see cref="!:System.Web.Mvc.ViewDataContainer"/>. + </summary> + </member> + <member name="T:System.Web.Mvc.ModelErrorCollection"> + <summary> + A collection of <see cref="T:System.Web.Mvc.ModelError"/> instances. + </summary> + </member> + <member name="M:System.Web.Mvc.ModelErrorCollection.Add(System.Exception)"> + <summary> + Adds an <see cref="T:System.Exception"/> to the <see cref="T:System.Web.Mvc.ModelErrorCollection"/> + </summary> + <param name="exception"></param> + </member> + <member name="M:System.Web.Mvc.ModelErrorCollection.Add(System.String)"> + <summary> + Adds an error message to the <see cref="T:System.Web.Mvc.ModelErrorCollection"/> + </summary> + <param name="errorMessage"></param> + </member> + <member name="T:System.Web.Mvc.AcceptVerbsAttribute"> + <summary> + When applied to an action method, specifies which HTTP verbs the method will respond to. + </summary> + </member> + <member name="P:System.Web.Mvc.AcceptVerbsAttribute.Verbs"> + <summary> + Gets the list of HTTP verbs the action method will respond to. + </summary> + </member> + <member name="T:System.Web.Mvc.ModelError"> + <summary> + Represents an error that occured while attempting to bind a request to the arguments of an action method. + </summary> + </member> + <member name="M:System.Web.Mvc.ModelError.#ctor(System.Exception)"> + <summary> + Initializes a new instance of the <see cref="T:System.Web.Mvc.ModelError"/> class with the specified exception. + </summary> + <remarks> + For security reasons, the exception's ErrorMessage property is not set to the + Exception's Message property by default. + </remarks> + <param name="exception"></param> + </member> + <member name="M:System.Web.Mvc.ModelError.#ctor(System.Exception,System.String)"> + <summary> + Initializes a new instance of the <see cref="T:System.Web.Mvc.ModelError"/> class with the specified exception and error message. + </summary> + <param name="exception"></param> + <param name="errorMessage"></param> + </member> + <member name="M:System.Web.Mvc.ModelError.#ctor(System.String)"> + <summary> + Initializes a new instance of the <see cref="T:System.Web.Mvc.ModelError"/> class with the specified error message. + </summary> + <param name="errorMessage"></param> + </member> + <member name="P:System.Web.Mvc.ModelError.Exception"> + <summary> + The <see cref="T:System.Exception"/>, if any, that occurred while binding to the model. + </summary> + </member> + <member name="P:System.Web.Mvc.ModelError.ErrorMessage"> + <summary> + + </summary> + </member> + <member name="T:System.Web.Mvc.ValueProviderResult"> + <summary> + Represents the result of an attempt to bind a supplied value (from a form post, query string, etc...) to + a property of an argument to an action method or to the argument itself. + </summary> + </member> + <member name="M:System.Web.Mvc.ValueProviderResult.#ctor(System.Object,System.String,System.Globalization.CultureInfo)"> + <summary> + Initializes a new instance of the <see cref="T:System.Web.Mvc.ValueProviderResult"/> class with the specified + raw value, attempted value, and <see cref="T:System.Globalization.CultureInfo"/>. + </summary> + <param name="rawValue"></param> + <param name="attemptedValue"></param> + <param name="culture"></param> + </member> + <member name="M:System.Web.Mvc.ValueProviderResult.ConvertTo(System.Type)"> + <summary> + Converts the value encapsulated by this result to the specified type. + </summary> + <param name="type">The target type</param> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.ValueProviderResult.ConvertTo(System.Type,System.Globalization.CultureInfo)"> + <summary> + Converts the value encapsulated by this result to the specified type. + </summary> + <param name="type">The target type</param> + <param name="culture">The culture to use in the conversion.</param> + <returns></returns> + </member> + <member name="P:System.Web.Mvc.ValueProviderResult.AttemptedValue"> + <summary> + The RawValue converted to a string for display purposes. + </summary> + </member> + <member name="P:System.Web.Mvc.ValueProviderResult.RawValue"> + <summary> + The raw value supplied by the value provider. + </summary> + </member> + <member name="T:System.Web.Mvc.FileContentResult"> + <summary> + Sends binary content to the response. + </summary> + </member> + <member name="M:System.Web.Mvc.FileContentResult.#ctor(System.Byte[],System.String)"> + <summary> + Initializes a new instance of <see cref="T:System.Web.Mvc.FileContentResult"/> with the specified file contents and content type. + </summary> + <param name="fileContents">The byte array to send to the response</param> + <param name="contentType">The content type to use for the response</param> + </member> + <member name="P:System.Web.Mvc.FileContentResult.FileContents"> + <summary> + The binary content to send to the response. + </summary> + </member> + <member name="T:System.Web.Mvc.TagBuilder"> + <summary> + Class used by the Html helpers to build HTML tags. + </summary> + </member> + <member name="T:System.Web.Mvc.ModelState"> + <summary> + Encapsulates the state of model binding to a property of an argument, or the argument itself, of an action method. + </summary> + </member> + <member name="P:System.Web.Mvc.ModelState.Value"> + <summary> + Returns a <see cref="T:System.Web.Mvc.ValueProviderResult"/> which encapsulates the value which was attempted to be bound by model binding. + </summary> + </member> + <member name="P:System.Web.Mvc.ModelState.Errors"> + <summary> + Returns a <see cref="T:System.Web.Mvc.ModelErrorCollection"/> containing any errors that occurred during model binding. + </summary> + </member> + <member name="M:System.Web.Mvc.Html.TextAreaExtensions.TextArea(System.Web.Mvc.HtmlHelper,System.String)"> + <summary> + Returns a textarea tag suitable for entering multiline input. + </summary> + <param name="htmlHelper"></param> + <param name="name">The form field name and <see cref="T:System.Web.Mvc.ViewDataDictionary">ViewData</see> key used to lookup the value.</param> + <returns>An textarea tag</returns> + </member> + <member name="M:System.Web.Mvc.Html.TextAreaExtensions.TextArea(System.Web.Mvc.HtmlHelper,System.String,System.Object)"> + <summary> + Returns a textarea tag suitable for entering multiline input. + </summary> + <param name="htmlHelper"></param> + <param name="name">The form field name and <see cref="T:System.Web.Mvc.ViewDataDictionary">ViewData</see> key used to lookup the value.</param> + <param name="htmlAttributes">An object containing the html attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax</param> + <returns>An textarea tag</returns> + </member> + <member name="M:System.Web.Mvc.Html.TextAreaExtensions.TextArea(System.Web.Mvc.HtmlHelper,System.String,System.Collections.Generic.IDictionary{System.String,System.Object})"> + <summary> + Returns a textarea tag suitable for entering multiline input. + </summary> + <param name="htmlHelper"></param> + <param name="name">The form field name and <see cref="T:System.Web.Mvc.ViewDataDictionary">ViewData</see> key used to lookup the value.</param> + <param name="htmlAttributes">An object containing the html attributes for the element</param> + <returns>An textarea tag</returns> + </member> + <member name="M:System.Web.Mvc.Html.TextAreaExtensions.TextArea(System.Web.Mvc.HtmlHelper,System.String,System.String)"> + <summary> + Returns a textarea tag suitable for entering multiline input. + </summary> + <param name="htmlHelper"></param> + <param name="name">The form field name and <see cref="T:System.Web.Mvc.ViewDataDictionary">ViewData</see> key used to lookup the value.</param> + <param name="value">The value of the input. If null, looks at the <see cref="T:System.Web.Mvc.ViewDataDictionary">ViewData</see> and then <see cref="T:System.Web.Mvc.ModelStateDictionary">ModelState</see>for the value.</param> + <returns>An textarea tag</returns> + </member> + <member name="M:System.Web.Mvc.Html.TextAreaExtensions.TextArea(System.Web.Mvc.HtmlHelper,System.String,System.String,System.Object)"> + <summary> + Returns a textarea tag suitable for entering multiline input. + </summary> + <param name="htmlHelper"></param> + <param name="name">The form field name and <see cref="T:System.Web.Mvc.ViewDataDictionary">ViewData</see> key used to lookup the value.</param> + <param name="value">The value of the input. If null, looks at the <see cref="T:System.Web.Mvc.ViewDataDictionary">ViewData</see> and then <see cref="T:System.Web.Mvc.ModelStateDictionary">ModelState</see>for the value.</param> + <param name="htmlAttributes">An object containing the html attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax</param> + <returns>An textarea tag</returns> + </member> + <member name="M:System.Web.Mvc.Html.TextAreaExtensions.TextArea(System.Web.Mvc.HtmlHelper,System.String,System.String,System.Collections.Generic.IDictionary{System.String,System.Object})"> + <summary> + Returns a textarea tag suitable for entering multiline input. + </summary> + <param name="htmlHelper"></param> + <param name="name">The form field name and <see cref="T:System.Web.Mvc.ViewDataDictionary">ViewData</see> key used to lookup the value.</param> + <param name="value">The value of the input. If null, looks at the <see cref="T:System.Web.Mvc.ViewDataDictionary">ViewData</see> and then <see cref="T:System.Web.Mvc.ModelStateDictionary">ModelState</see>for the value.</param> + <param name="htmlAttributes">An object containing the html attributes for the element</param> + <returns>An textarea tag</returns> + </member> + <member name="M:System.Web.Mvc.Html.TextAreaExtensions.TextArea(System.Web.Mvc.HtmlHelper,System.String,System.String,System.Int32,System.Int32,System.Object)"> + <summary> + Returns a textarea tag suitable for entering multiline input. + </summary> + <param name="htmlHelper"></param> + <param name="name">The form field name and <see cref="T:System.Web.Mvc.ViewDataDictionary">ViewData</see> key used to lookup the value.</param> + <param name="value">The value of the input. If null, looks at the <see cref="T:System.Web.Mvc.ViewDataDictionary">ViewData</see> and then <see cref="T:System.Web.Mvc.ModelStateDictionary">ModelState</see>for the value.</param> + <param name="columns">The number of columns</param> + <param name="rows">The number of rows</param> + <param name="htmlAttributes">An object containing the html attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax</param> + <returns>An textarea tag</returns> + </member> + <member name="M:System.Web.Mvc.Html.TextAreaExtensions.TextArea(System.Web.Mvc.HtmlHelper,System.String,System.String,System.Int32,System.Int32,System.Collections.Generic.IDictionary{System.String,System.Object})"> + <summary> + Returns a textarea tag suitable for entering multiline input. + </summary> + <param name="htmlHelper"></param> + <param name="name">The form field name and <see cref="T:System.Web.Mvc.ViewDataDictionary">ViewData</see> key used to lookup the value.</param> + <param name="value">The value of the input. If null, looks at the <see cref="T:System.Web.Mvc.ViewDataDictionary">ViewData</see> and then <see cref="T:System.Web.Mvc.ModelStateDictionary">ModelState</see>for the value.</param> + <param name="columns">The number of columns</param> + <param name="rows">The number of rows</param> + <param name="htmlAttributes">An object containing the html attributes for the element</param> + <returns>An textarea tag</returns> + </member> + <member name="M:System.Web.Mvc.Html.FormExtensions.BeginForm(System.Web.Mvc.HtmlHelper)"> + <summary> + Writes a begin form tag to the response while returning an <see cref="!:System.Web.Mvc.MvcForm"/> + instance. Can be used in a using block in which case it renders the end form tag at the end of the + using block. + </summary> + <param name="htmlHelper"></param> + <returns>An <see cref="!:System.Web.Mvc.MvcForm"/> instance.</returns> + </member> + <member name="M:System.Web.Mvc.Html.FormExtensions.BeginForm(System.Web.Mvc.HtmlHelper,System.Object)"> + <summary> + Writes a begin form tag to the response while returning an <see cref="!:System.Web.Mvc.MvcForm"/> + instance. Can be used in a using block in which case it renders the end form tag at the end of the + using block. + </summary> + <param name="htmlHelper"></param> + <param name="routeValues">An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax.</param> + <returns>An <see cref="!:System.Web.Mvc.MvcForm"/> instance.</returns> + </member> + <member name="M:System.Web.Mvc.Html.FormExtensions.BeginForm(System.Web.Mvc.HtmlHelper,System.Web.Routing.RouteValueDictionary)"> + <summary> + Writes a begin form tag to the response while returning an <see cref="!:System.Web.Mvc.MvcForm"/> + instance. Can be used in a using block in which case it renders the end form tag at the end of the + using block. + </summary> + <param name="htmlHelper"></param> + <param name="routeValues">An object containing the parameters for a route</param> + <returns>An <see cref="!:System.Web.Mvc.MvcForm"/> instance.</returns> + </member> + <member name="M:System.Web.Mvc.Html.FormExtensions.BeginForm(System.Web.Mvc.HtmlHelper,System.String,System.String)"> + <summary> + Writes a begin form tag to the response while returning an <see cref="!:System.Web.Mvc.MvcForm"/> + instance. Can be used in a using block in which case it renders the end form tag at the end of the + using block. + </summary> + <param name="htmlHelper"></param> + <param name="actionName">The name of the action</param> + <param name="controllerName">The name of the controller</param> + <returns>An <see cref="!:System.Web.Mvc.MvcForm"/> instance.</returns> + </member> + <member name="M:System.Web.Mvc.Html.FormExtensions.BeginForm(System.Web.Mvc.HtmlHelper,System.String,System.String,System.Object)"> + <summary> + Writes a begin form tag to the response while returning an <see cref="!:System.Web.Mvc.MvcForm"/> + instance. Can be used in a using block in which case it renders the end form tag at the end of the + using block. + </summary> + <param name="htmlHelper"></param> + <param name="actionName">The name of the action</param> + <param name="controllerName">The name of the controller</param> + <param name="routeValues">An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax.</param> + <returns>An <see cref="!:System.Web.Mvc.MvcForm"/> instance.</returns> + </member> + <member name="M:System.Web.Mvc.Html.FormExtensions.BeginForm(System.Web.Mvc.HtmlHelper,System.String,System.String,System.Web.Routing.RouteValueDictionary)"> + <summary> + Writes a begin form tag to the response while returning an <see cref="!:System.Web.Mvc.MvcForm"/> + instance. Can be used in a using block in which case it renders the end form tag at the end of the + using block. + </summary> + <param name="htmlHelper"></param> + <param name="actionName">The name of the action</param> + <param name="controllerName">The name of the controller</param> + <param name="routeValues">An object containing the parameters for a route</param> + <returns>An <see cref="!:System.Web.Mvc.MvcForm"/> instance.</returns> + </member> + <member name="M:System.Web.Mvc.Html.FormExtensions.BeginForm(System.Web.Mvc.HtmlHelper,System.String,System.String,System.Web.Mvc.FormMethod)"> + <summary> + Writes a begin form tag to the response while returning an <see cref="!:System.Web.Mvc.MvcForm"/> + instance. Can be used in a using block in which case it renders the end form tag at the end of the + using block. + </summary> + <param name="htmlHelper"></param> + <param name="actionName">The name of the action</param> + <param name="controllerName">The name of the controller</param> + <param name="method">The HTTP method for the form post, either Get or Post</param> + <returns>An <see cref="!:System.Web.Mvc.MvcForm"/> instance.</returns> + </member> + <member name="M:System.Web.Mvc.Html.FormExtensions.BeginForm(System.Web.Mvc.HtmlHelper,System.String,System.String,System.Object,System.Web.Mvc.FormMethod)"> + <summary> + Writes a begin form tag to the response while returning an <see cref="!:System.Web.Mvc.MvcForm"/> + instance. Can be used in a using block in which case it renders the end form tag at the end of the + using block. + </summary> + <param name="htmlHelper"></param> + <param name="actionName">The name of the action</param> + <param name="controllerName">The name of the controller</param> + <param name="routeValues">An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax.</param> + <param name="method">The HTTP method for the form post, either Get or Post</param> + <returns>An <see cref="!:System.Web.Mvc.MvcForm"/> instance.</returns> + </member> + <member name="M:System.Web.Mvc.Html.FormExtensions.BeginForm(System.Web.Mvc.HtmlHelper,System.String,System.String,System.Web.Routing.RouteValueDictionary,System.Web.Mvc.FormMethod)"> + <summary> + Writes a begin form tag to the response while returning an <see cref="!:System.Web.Mvc.MvcForm"/> + instance. Can be used in a using block in which case it renders the end form tag at the end of the + using block. + </summary> + <param name="htmlHelper"></param> + <param name="actionName">The name of the action</param> + <param name="controllerName">The name of the controller</param> + <param name="routeValues">An object containing the parameters for a route</param> + <param name="method">The HTTP method for the form post, either Get or Post</param> + <returns>An <see cref="!:System.Web.Mvc.MvcForm"/> instance.</returns> + </member> + <member name="M:System.Web.Mvc.Html.FormExtensions.BeginForm(System.Web.Mvc.HtmlHelper,System.String,System.String,System.Web.Mvc.FormMethod,System.Object)"> + <summary> + Writes a begin form tag to the response while returning an <see cref="!:System.Web.Mvc.MvcForm"/> + instance. Can be used in a using block in which case it renders the end form tag at the end of the + using block. + </summary> + <param name="htmlHelper"></param> + <param name="actionName">The name of the action</param> + <param name="controllerName">The name of the controller</param> + <param name="method">The HTTP method for the form post, either Get or Post</param> + <param name="htmlAttributes">An object containing the html attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax</param> + <returns>An <see cref="!:System.Web.Mvc.MvcForm"/> instance.</returns> + </member> + <member name="M:System.Web.Mvc.Html.FormExtensions.BeginForm(System.Web.Mvc.HtmlHelper,System.String,System.String,System.Web.Mvc.FormMethod,System.Collections.Generic.IDictionary{System.String,System.Object})"> + <summary> + Writes a begin form tag to the response while returning an <see cref="!:System.Web.Mvc.MvcForm"/> + instance. Can be used in a using block in which case it renders the end form tag at the end of the + using block. + </summary> + <param name="htmlHelper"></param> + <param name="actionName">The name of the action</param> + <param name="controllerName">The name of the controller</param> + <param name="method">The HTTP method for the form post, either Get or Post</param> + <param name="htmlAttributes">An object containing the html attributes for the element</param> + <returns>An <see cref="!:System.Web.Mvc.MvcForm"/> instance.</returns> + </member> + <member name="M:System.Web.Mvc.Html.FormExtensions.BeginForm(System.Web.Mvc.HtmlHelper,System.String,System.String,System.Object,System.Web.Mvc.FormMethod,System.Object)"> + <summary> + Writes a begin form tag to the response while returning an <see cref="!:System.Web.Mvc.MvcForm"/> + instance. Can be used in a using block in which case it renders the end form tag at the end of the + using block. + </summary> + <param name="htmlHelper"></param> + <param name="actionName">The name of the action</param> + <param name="controllerName">The name of the controller</param> + <param name="routeValues">An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax.</param> + <param name="method">The HTTP method for the form post, either Get or Post</param> + <param name="htmlAttributes">An object containing the html attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax</param> + <returns>An <see cref="!:System.Web.Mvc.MvcForm"/> instance.</returns> + </member> + <member name="M:System.Web.Mvc.Html.FormExtensions.BeginForm(System.Web.Mvc.HtmlHelper,System.String,System.String,System.Web.Routing.RouteValueDictionary,System.Web.Mvc.FormMethod,System.Collections.Generic.IDictionary{System.String,System.Object})"> + <summary> + Writes a begin form tag to the response while returning an <see cref="!:System.Web.Mvc.MvcForm"/> + instance. Can be used in a using block in which case it renders the end form tag at the end of the + using block. + </summary> + <param name="htmlHelper"></param> + <param name="actionName">The name of the action</param> + <param name="controllerName">The name of the controller</param> + <param name="routeValues">An object containing the parameters for a route</param> + <param name="method">The HTTP method for the form post, either Get or Post</param> + <param name="htmlAttributes">An object containing the html attributes for the element</param> + <returns>An <see cref="!:System.Web.Mvc.MvcForm"/> instance.</returns> + </member> + <member name="M:System.Web.Mvc.Html.FormExtensions.BeginRouteForm(System.Web.Mvc.HtmlHelper,System.Object)"> + <summary> + Writes a begin form tag to the response while returning an <see cref="!:System.Web.Mvc.MvcForm"/> + instance. Can be used in a using block in which case it renders the end form tag at the end of the + using block. + </summary> + <param name="htmlHelper"></param> + <param name="routeValues">An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax.</param> + <returns>An <see cref="!:System.Web.Mvc.MvcForm"/> instance.</returns> + </member> + <member name="M:System.Web.Mvc.Html.FormExtensions.BeginRouteForm(System.Web.Mvc.HtmlHelper,System.Web.Routing.RouteValueDictionary)"> + <summary> + Writes a begin form tag to the response while returning an <see cref="!:System.Web.Mvc.MvcForm"/> + instance. Can be used in a using block in which case it renders the end form tag at the end of the + using block. + </summary> + <param name="htmlHelper"></param> + <param name="routeValues">An object containing the parameters for a route</param> + <returns>An <see cref="!:System.Web.Mvc.MvcForm"/> instance.</returns> + </member> + <member name="M:System.Web.Mvc.Html.FormExtensions.BeginRouteForm(System.Web.Mvc.HtmlHelper,System.String)"> + <summary> + Writes a begin form tag to the response while returning an <see cref="!:System.Web.Mvc.MvcForm"/> + instance. Can be used in a using block in which case it renders the end form tag at the end of the + using block. + </summary> + <param name="htmlHelper"></param> + <param name="routeName">The name of the route to used to obtain the form post url.</param> + <returns>An <see cref="!:System.Web.Mvc.MvcForm"/> instance.</returns> + </member> + <member name="M:System.Web.Mvc.Html.FormExtensions.BeginRouteForm(System.Web.Mvc.HtmlHelper,System.String,System.Object)"> + <summary> + Writes a begin form tag to the response while returning an <see cref="!:System.Web.Mvc.MvcForm"/> + instance. Can be used in a using block in which case it renders the end form tag at the end of the + using block. + </summary> + <param name="htmlHelper"></param> + <param name="routeName">The name of the route to used to obtain the form post url.</param> + <param name="routeValues">An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax.</param> + <returns>An <see cref="!:System.Web.Mvc.MvcForm"/> instance.</returns> + </member> + <member name="M:System.Web.Mvc.Html.FormExtensions.BeginRouteForm(System.Web.Mvc.HtmlHelper,System.String,System.Web.Routing.RouteValueDictionary)"> + <summary> + Writes a begin form tag to the response while returning an <see cref="!:System.Web.Mvc.MvcForm"/> + instance. Can be used in a using block in which case it renders the end form tag at the end of the + using block. + </summary> + <param name="htmlHelper"></param> + <param name="routeName">The name of the route to used to obtain the form post url.</param> + <param name="routeValues">An object containing the parameters for a route</param> + <returns>An <see cref="!:System.Web.Mvc.MvcForm"/> instance.</returns> + </member> + <member name="M:System.Web.Mvc.Html.FormExtensions.BeginRouteForm(System.Web.Mvc.HtmlHelper,System.String,System.Web.Mvc.FormMethod)"> + <summary> + Writes a begin form tag to the response while returning an <see cref="!:System.Web.Mvc.MvcForm"/> + instance. Can be used in a using block in which case it renders the end form tag at the end of the + using block. + </summary> + <param name="htmlHelper"></param> + <param name="routeName">The name of the route to used to obtain the form post url.</param> + <param name="method">The HTTP method for the form post, either Get or Post</param> + <returns>An <see cref="!:System.Web.Mvc.MvcForm"/> instance.</returns> + </member> + <member name="M:System.Web.Mvc.Html.FormExtensions.BeginRouteForm(System.Web.Mvc.HtmlHelper,System.String,System.Object,System.Web.Mvc.FormMethod)"> + <summary> + Writes a begin form tag to the response while returning an <see cref="!:System.Web.Mvc.MvcForm"/> + instance. Can be used in a using block in which case it renders the end form tag at the end of the + using block. + </summary> + <param name="htmlHelper"></param> + <param name="routeName">The name of the route to used to obtain the form post url.</param> + <param name="routeValues">An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax.</param> + <param name="method">The HTTP method for the form post, either Get or Post</param> + <returns>An <see cref="!:System.Web.Mvc.MvcForm"/> instance.</returns> + </member> + <member name="M:System.Web.Mvc.Html.FormExtensions.BeginRouteForm(System.Web.Mvc.HtmlHelper,System.String,System.Web.Routing.RouteValueDictionary,System.Web.Mvc.FormMethod)"> + <summary> + Writes a begin form tag to the response while returning an <see cref="!:System.Web.Mvc.MvcForm"/> + instance. Can be used in a using block in which case it renders the end form tag at the end of the + using block. + </summary> + <param name="htmlHelper"></param> + <param name="routeName">The name of the route to used to obtain the form post url.</param> + <param name="routeValues">An object containing the parameters for a route</param> + <param name="method">The HTTP method for the form post, either Get or Post</param> + <returns>An <see cref="!:System.Web.Mvc.MvcForm"/> instance.</returns> + </member> + <member name="M:System.Web.Mvc.Html.FormExtensions.BeginRouteForm(System.Web.Mvc.HtmlHelper,System.String,System.Web.Mvc.FormMethod,System.Object)"> + <summary> + Writes a begin form tag to the response while returning an <see cref="!:System.Web.Mvc.MvcForm"/> + instance. Can be used in a using block in which case it renders the end form tag at the end of the + using block. + </summary> + <param name="htmlHelper"></param> + <param name="routeName">The name of the route to used to obtain the form post url.</param> + <param name="method">The HTTP method for the form post, either Get or Post</param> + <param name="htmlAttributes">An object containing the html attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax</param> + <returns>An <see cref="!:System.Web.Mvc.MvcForm"/> instance.</returns> + </member> + <member name="M:System.Web.Mvc.Html.FormExtensions.BeginRouteForm(System.Web.Mvc.HtmlHelper,System.String,System.Web.Mvc.FormMethod,System.Collections.Generic.IDictionary{System.String,System.Object})"> + <summary> + Writes a begin form tag to the response while returning an <see cref="!:System.Web.Mvc.MvcForm"/> + instance. Can be used in a using block in which case it renders the end form tag at the end of the + using block. + </summary> + <param name="htmlHelper"></param> + <param name="routeName">The name of the route to used to obtain the form post url.</param> + <param name="method">The HTTP method for the form post, either Get or Post</param> + <param name="htmlAttributes">An object containing the html attributes for the element</param> + <returns>An <see cref="!:System.Web.Mvc.MvcForm"/> instance.</returns> + </member> + <member name="M:System.Web.Mvc.Html.FormExtensions.BeginRouteForm(System.Web.Mvc.HtmlHelper,System.String,System.Object,System.Web.Mvc.FormMethod,System.Object)"> + <summary> + Writes a begin form tag to the response while returning an <see cref="!:System.Web.Mvc.MvcForm"/> + instance. Can be used in a using block in which case it renders the end form tag at the end of the + using block. + </summary> + <param name="htmlHelper"></param> + <param name="routeName">The name of the route to used to obtain the form post url.</param> + <param name="routeValues">An object containing the parameters for a route. The parameters are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax.</param> + <param name="method">The HTTP method for the form post, either Get or Post</param> + <param name="htmlAttributes">An object containing the html attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax</param> + <returns>An <see cref="!:System.Web.Mvc.MvcForm"/> instance.</returns> + </member> + <member name="M:System.Web.Mvc.Html.FormExtensions.BeginRouteForm(System.Web.Mvc.HtmlHelper,System.String,System.Web.Routing.RouteValueDictionary,System.Web.Mvc.FormMethod,System.Collections.Generic.IDictionary{System.String,System.Object})"> + <summary> + Writes a begin form tag to the response while returning an <see cref="!:System.Web.Mvc.MvcForm"/> + instance. Can be used in a using block in which case it renders the end form tag at the end of the + using block. + </summary> + <param name="htmlHelper"></param> + <param name="routeName">The name of the route to used to obtain the form post url.</param> + <param name="routeValues">An object containing the parameters for a route</param> + <param name="method">The HTTP method for the form post, either Get or Post</param> + <param name="htmlAttributes">An object containing the html attributes for the element</param> + <returns>An <see cref="!:System.Web.Mvc.MvcForm"/> instance.</returns> + </member> + <member name="M:System.Web.Mvc.Html.FormExtensions.EndForm(System.Web.Mvc.HtmlHelper)"> + <summary> + Renders the end form tag to the response. This provides an alternative way to end the form + to using a using block with <see cref="M:System.Web.Mvc.Html.FormExtensions.BeginForm(System.Web.Mvc.HtmlHelper)"/> and <see cref="M:System.Web.Mvc.Html.FormExtensions.BeginRouteForm(System.Web.Mvc.HtmlHelper,System.Object)"/>. + </summary> + <param name="htmlHelper"></param> + </member> + <member name="T:System.Web.Mvc.FilePathResult"> + <summary> + Sends the contents of a file to the response. + </summary> + </member> + <member name="M:System.Web.Mvc.FilePathResult.#ctor(System.String,System.String)"> + <summary> + Initializes an instance of <see cref="T:System.Web.Mvc.FilePathResult"/> with the specified file name and content type. + </summary> + <param name="fileName">The name of the file to send to the response.</param> + <param name="contentType">The content type of the response.</param> + </member> + <member name="P:System.Web.Mvc.FilePathResult.FileName"> + <summary> + The path to the file which is sent to the response. + </summary> + </member> + <member name="T:System.Web.Mvc.EmptyResult"> + <summary> + Represents a result that doesn't do anything, like a controller action returning null. + </summary> + <remarks> + <para>This follows a pattern known as the Null Object pattern</para> + </remarks> + </member> + <member name="T:System.Web.Mvc.ITempDataProvider"> + <summary> + Defines the contract for temp data providers which store data viewed on the next request. + </summary> + </member> + <member name="M:System.Web.Mvc.Html.ValidationExtensions.ValidationMessage(System.Web.Mvc.HtmlHelper,System.String)"> + <summary> + Displays a validation message if the specified field contains an error in the <see cref="T:System.Web.Mvc.ModelStateDictionary">ModelState</see>. + </summary> + <param name="htmlHelper"></param> + <param name="modelName">The name of the property or model object being validated</param> + <returns>An empty string if valid, otherwise a span with an error message</returns> + </member> + <member name="M:System.Web.Mvc.Html.ValidationExtensions.ValidationMessage(System.Web.Mvc.HtmlHelper,System.String,System.Object)"> + <summary> + Displays a validation message if the specified field contains an error in the <see cref="T:System.Web.Mvc.ModelStateDictionary">ModelState</see>. + </summary> + <param name="htmlHelper"></param> + <param name="modelName">The name of the property or model object being validated</param> + <param name="htmlAttributes">An object containing the html attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax</param> + <returns>An empty string if valid, otherwise a span with an error message</returns> + </member> + <member name="M:System.Web.Mvc.Html.ValidationExtensions.ValidationMessage(System.Web.Mvc.HtmlHelper,System.String,System.String)"> + <summary> + Displays a validation message if the specified field contains an error in the <see cref="T:System.Web.Mvc.ModelStateDictionary">ModelState</see>. + </summary> + <param name="htmlHelper"></param> + <param name="modelName">The name of the property or model object being validated</param> + <param name="validationMessage">The message to display if the specified field is in error</param> + <returns>An empty string if valid, otherwise a span with an error message</returns> + </member> + <member name="M:System.Web.Mvc.Html.ValidationExtensions.ValidationMessage(System.Web.Mvc.HtmlHelper,System.String,System.String,System.Object)"> + <summary> + Displays a validation message if the specified field contains an error in the <see cref="T:System.Web.Mvc.ModelStateDictionary">ModelState</see>. + </summary> + <param name="htmlHelper"></param> + <param name="modelName">The name of the property or model object being validated</param> + <param name="validationMessage">The message to display if the specified field is in error</param> + <param name="htmlAttributes">An object containing the html attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax</param> + <returns>An empty string if valid, otherwise a span with an error message</returns> + </member> + <member name="M:System.Web.Mvc.Html.ValidationExtensions.ValidationMessage(System.Web.Mvc.HtmlHelper,System.String,System.Collections.Generic.IDictionary{System.String,System.Object})"> + <summary> + Displays a validation message if the specified field contains an error in the <see cref="T:System.Web.Mvc.ModelStateDictionary">ModelState</see>. + </summary> + <param name="htmlHelper"></param> + <param name="modelName">The name of the property or model object being validated</param> + <param name="htmlAttributes">An object containing the html attributes for the element</param> + <returns>An empty string if valid, otherwise a span with an error message</returns> + </member> + <member name="M:System.Web.Mvc.Html.ValidationExtensions.ValidationMessage(System.Web.Mvc.HtmlHelper,System.String,System.String,System.Collections.Generic.IDictionary{System.String,System.Object})"> + <summary> + Displays a validation message if the specified field contains an error in the <see cref="T:System.Web.Mvc.ModelStateDictionary">ModelState</see>. + </summary> + <param name="htmlHelper"></param> + <param name="modelName">The name of the property or model object being validated</param> + <param name="validationMessage">The message to display if the specified field is in error</param> + <param name="htmlAttributes">An object containing the html attributes for the element</param> + <returns>An empty string if valid, otherwise a span with an error message</returns> + </member> + <member name="M:System.Web.Mvc.Html.ValidationExtensions.ValidationSummary(System.Web.Mvc.HtmlHelper)"> + <summary> + Returns an unordered list [ul] of validation messages within the <see cref="T:System.Web.Mvc.ModelStateDictionary">ModelState</see>. + </summary> + <param name="htmlHelper"></param> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.Html.ValidationExtensions.ValidationSummary(System.Web.Mvc.HtmlHelper,System.Object)"> + <summary> + Returns an unordered list [ul] of validation messages within the <see cref="T:System.Web.Mvc.ModelStateDictionary">ModelState</see>. + </summary> + <param name="htmlHelper"></param> + <param name="htmlAttributes">An object containing the html attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax</param> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.Html.ValidationExtensions.ValidationSummary(System.Web.Mvc.HtmlHelper,System.Collections.Generic.IDictionary{System.String,System.Object})"> + <summary> + Returns an unordered list [ul] of validation messages within the <see cref="T:System.Web.Mvc.ModelStateDictionary">ModelState</see>. + </summary> + <param name="htmlHelper"></param> + <param name="htmlAttributes">An object containing the html attributes for the element</param> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.Html.SelectExtensions.DropDownList(System.Web.Mvc.HtmlHelper,System.String,System.String)"> + <summary> + Returns a select tag used to select a single option from a set of possible choices. + </summary> + <param name="htmlHelper"></param> + <param name="name">The name of the form field and used as a key to lookup possible options. If ViewData[name] implements IEnumerable of <see cref="T:System.Web.Mvc.SelectListItem"/>.</param> + <param name="optionLabel">Provides the text for a default empty valued option, if it is not null.</param> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.Html.SelectExtensions.DropDownList(System.Web.Mvc.HtmlHelper,System.String,System.Collections.Generic.IEnumerable{System.Web.Mvc.SelectListItem},System.String)"> + <summary> + Returns a select tag used to select a single option from a set of possible choices. + </summary> + <param name="htmlHelper"></param> + <param name="name">The name of the form field and used as a key to lookup possible options. If ViewData[name] implements IEnumerable of <see cref="T:System.Web.Mvc.SelectListItem"/>.</param> + <param name="selectList">The enumeration of SelectListItem instances used to populate the drop down.</param> + <param name="optionLabel">Provides the text for a default empty valued option, if it is not null.</param> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.Html.SelectExtensions.DropDownList(System.Web.Mvc.HtmlHelper,System.String,System.Collections.Generic.IEnumerable{System.Web.Mvc.SelectListItem},System.String,System.Object)"> + <summary> + Returns a select tag used to select a single option from a set of possible choices. + </summary> + <param name="htmlHelper"></param> + <param name="name">The name of the form field and used as a key to lookup possible options. If ViewData[name] implements IEnumerable of <see cref="T:System.Web.Mvc.SelectListItem"/>.</param> + <param name="selectList">The enumeration of SelectListItem instances used to populate the drop down.</param> + <param name="optionLabel">Provides the text for a default empty valued option, if it is not null.</param> + <param name="htmlAttributes">An object containing the html attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax</param> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.Html.SelectExtensions.DropDownList(System.Web.Mvc.HtmlHelper,System.String)"> + <summary> + Returns a select tag used to select a single option from a set of possible choices. + </summary> + <param name="htmlHelper"></param> + <param name="name">The name of the form field and used as a key to lookup possible options. If ViewData[name] implements IEnumerable of <see cref="T:System.Web.Mvc.SelectListItem"/>.</param> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.Html.SelectExtensions.DropDownList(System.Web.Mvc.HtmlHelper,System.String,System.Collections.Generic.IEnumerable{System.Web.Mvc.SelectListItem})"> + <summary> + Returns a select tag used to select a single option from a set of possible choices. + </summary> + <param name="htmlHelper"></param> + <param name="name">The name of the form field and used as a key to lookup possible options. If ViewData[name] implements IEnumerable of <see cref="T:System.Web.Mvc.SelectListItem"/>.</param> + <param name="selectList">The enumeration of SelectListItem instances used to populate the drop down.</param> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.Html.SelectExtensions.DropDownList(System.Web.Mvc.HtmlHelper,System.String,System.Collections.Generic.IEnumerable{System.Web.Mvc.SelectListItem},System.Object)"> + <summary> + Returns a select tag used to select a single option from a set of possible choices. + </summary> + <param name="htmlHelper"></param> + <param name="name">The name of the form field and used as a key to lookup possible options. If ViewData[name] implements IEnumerable of <see cref="T:System.Web.Mvc.SelectListItem"/>.</param> + <param name="selectList">The enumeration of SelectListItem instances used to populate the drop down.</param> + <param name="htmlAttributes">An object containing the html attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax</param> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.Html.SelectExtensions.DropDownList(System.Web.Mvc.HtmlHelper,System.String,System.Collections.Generic.IEnumerable{System.Web.Mvc.SelectListItem},System.Collections.Generic.IDictionary{System.String,System.Object})"> + <summary> + Returns a select tag used to select a single option from a set of possible choices. + </summary> + <param name="htmlHelper"></param> + <param name="name">The name of the form field and used as a key to lookup possible options. If ViewData[name] implements IEnumerable of <see cref="T:System.Web.Mvc.SelectListItem"/>.</param> + <param name="selectList">The enumeration of SelectListItem instances used to populate the drop down.</param> + <param name="htmlAttributes">An object containing the html attributes for the element.</param> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.Html.SelectExtensions.DropDownList(System.Web.Mvc.HtmlHelper,System.String,System.Collections.Generic.IEnumerable{System.Web.Mvc.SelectListItem},System.String,System.Collections.Generic.IDictionary{System.String,System.Object})"> + <summary> + Returns a select tag used to select a single option from a set of possible choices. + </summary> + <param name="htmlHelper"></param> + <param name="name">The name of the form field and used as a key to lookup possible options. If ViewData[name] implements IEnumerable of <see cref="T:System.Web.Mvc.SelectListItem"/>.</param> + <param name="selectList">The enumeration of SelectListItem instances used to populate the drop down.</param> + <param name="optionLabel">Provides the text for a default empty valued option, if it is not null.</param> + <param name="htmlAttributes">An object containing the html attributes for the element.</param> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.Html.SelectExtensions.ListBox(System.Web.Mvc.HtmlHelper,System.String)"> + <summary> + Returns a select tag used to select a multiple options from a set of possible choices. + </summary> + <param name="htmlHelper"></param> + <param name="name">The name of the form field and used as a key to lookup possible options. If ViewData[name] implements IEnumerable of <see cref="T:System.Web.Mvc.SelectListItem"/>.</param> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.Html.SelectExtensions.ListBox(System.Web.Mvc.HtmlHelper,System.String,System.Collections.Generic.IEnumerable{System.Web.Mvc.SelectListItem})"> + <summary> + Returns a select tag used to select a multiple options from a set of possible choices. + </summary> + <param name="htmlHelper"></param> + <param name="name">The name of the form field and used as a key to lookup possible options. If ViewData[name] implements IEnumerable of <see cref="T:System.Web.Mvc.SelectListItem"/>.</param> + <param name="selectList">The enumeration of SelectListItem instances used to populate the drop down.</param> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.Html.SelectExtensions.ListBox(System.Web.Mvc.HtmlHelper,System.String,System.Collections.Generic.IEnumerable{System.Web.Mvc.SelectListItem},System.Object)"> + <summary> + Returns a select tag used to select a multiple options from a set of possible choices. + </summary> + <param name="htmlHelper"></param> + <param name="name">The name of the form field and used as a key to lookup possible options. If ViewData[name] implements IEnumerable of <see cref="T:System.Web.Mvc.SelectListItem"/>.</param> + <param name="selectList">The enumeration of SelectListItem instances used to populate the drop down.</param> + <param name="htmlAttributes">An object containing the html attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax</param> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.Html.SelectExtensions.ListBox(System.Web.Mvc.HtmlHelper,System.String,System.Collections.Generic.IEnumerable{System.Web.Mvc.SelectListItem},System.Collections.Generic.IDictionary{System.String,System.Object})"> + <summary> + Returns a select tag used to select a multiple options from a set of possible choices. + </summary> + <param name="htmlHelper"></param> + <param name="name">The name of the form field and used as a key to lookup possible options. If ViewData[name] implements IEnumerable of <see cref="T:System.Web.Mvc.SelectListItem"/>.</param> + <param name="selectList">The enumeration of SelectListItem instances used to populate the drop down.</param> + <param name="htmlAttributes">An object containing the html attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax</param> + <returns></returns> + </member> + <member name="M:System.Web.Mvc.Html.InputExtensions.CheckBox(System.Web.Mvc.HtmlHelper,System.String)"> + <summary> + Returns the input tag for a checkbox. + </summary> + <param name="htmlHelper"></param> + <param name="name">The form field name</param> + <returns>An input tag with the type set to "checkbox"</returns> + </member> + <member name="M:System.Web.Mvc.Html.InputExtensions.CheckBox(System.Web.Mvc.HtmlHelper,System.String,System.Boolean)"> + <summary> + Returns the input tag for a checkbox. + </summary> + <param name="htmlHelper"></param> + <param name="name">The form field name</param> + <param name="isChecked">A boolean indicating whether or not the checkbox is checked</param> + <returns>An input tag with the type set to "checkbox"</returns> + </member> + <member name="M:System.Web.Mvc.Html.InputExtensions.CheckBox(System.Web.Mvc.HtmlHelper,System.String,System.Boolean,System.Object)"> + <summary> + Returns the input tag for a checkbox. + </summary> + <param name="htmlHelper"></param> + <param name="name">The form field name</param> + <param name="isChecked">A boolean indicating whether or not the checkbox is checked</param> + <param name="htmlAttributes">An object containing the html attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax</param> + <returns>An input tag with the type set to "checkbox"</returns> + </member> + <member name="M:System.Web.Mvc.Html.InputExtensions.CheckBox(System.Web.Mvc.HtmlHelper,System.String,System.Object)"> + <summary> + Returns the input tag for a checkbox. + </summary> + <param name="htmlHelper"></param> + <param name="name">The form field name</param> + <param name="htmlAttributes">An object containing the html attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax</param> + <returns>An input tag with the type set to "checkbox"</returns> + </member> + <member name="M:System.Web.Mvc.Html.InputExtensions.CheckBox(System.Web.Mvc.HtmlHelper,System.String,System.Collections.Generic.IDictionary{System.String,System.Object})"> + <summary> + Returns the input tag for a checkbox. + </summary> + <param name="htmlHelper"></param> + <param name="name">The form field name</param> + <param name="htmlAttributes">An object containing the html attributes for the element</param> + <returns>An input tag with the type set to "checkbox"</returns> + </member> + <member name="M:System.Web.Mvc.Html.InputExtensions.CheckBox(System.Web.Mvc.HtmlHelper,System.String,System.Boolean,System.Collections.Generic.IDictionary{System.String,System.Object})"> + <summary> + Returns the input tag for a checkbox. + </summary> + <param name="htmlHelper"></param> + <param name="name">The form field name</param> + <param name="isChecked">A boolean indicating whether or not the checkbox is checked</param> + <param name="htmlAttributes">An object containing the html attributes for the element</param> + <returns>An input tag with the type set to "checkbox"</returns> + </member> + <member name="M:System.Web.Mvc.Html.InputExtensions.Hidden(System.Web.Mvc.HtmlHelper,System.String)"> + <summary> + Returns a hidden input tag. + </summary> + <param name="htmlHelper"></param> + <param name="name">The form field name and <see cref="T:System.Web.Mvc.ViewDataDictionary">ViewData</see> key used to lookup the value.</param> + <returns>An input tag with the type set to "hidden"</returns> + </member> + <member name="M:System.Web.Mvc.Html.InputExtensions.Hidden(System.Web.Mvc.HtmlHelper,System.String,System.Object)"> + <summary> + Returns a hidden input tag. + </summary> + <param name="htmlHelper"></param> + <param name="name">The form field name and <see cref="T:System.Web.Mvc.ViewDataDictionary">ViewData</see> key used to lookup the value.</param> + <param name="value">The value of the hidden input. If null, looks at the <see cref="T:System.Web.Mvc.ViewDataDictionary">ViewData</see> and then <see cref="T:System.Web.Mvc.ModelStateDictionary">ModelState</see>for the value.</param> + <returns>An input tag with the type set to "hidden"</returns> + </member> + <member name="M:System.Web.Mvc.Html.InputExtensions.Hidden(System.Web.Mvc.HtmlHelper,System.String,System.Object,System.Object)"> + <summary> + Returns a hidden input tag. + </summary> + <param name="htmlHelper"></param> + <param name="name">The form field name and <see cref="T:System.Web.Mvc.ViewDataDictionary">ViewData</see> key used to lookup the value.</param> + <param name="value">The value of the hidden input. If null, looks at the <see cref="T:System.Web.Mvc.ViewDataDictionary">ViewData</see> and then <see cref="T:System.Web.Mvc.ModelStateDictionary">ModelState</see>for the value.</param> + <param name="htmlAttributes">An object containing the html attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax</param> + <returns>An input tag with the type set to "hidden"</returns> + </member> + <member name="M:System.Web.Mvc.Html.InputExtensions.Hidden(System.Web.Mvc.HtmlHelper,System.String,System.Object,System.Collections.Generic.IDictionary{System.String,System.Object})"> + <summary> + Returns a hidden input tag. + </summary> + <param name="htmlHelper"></param> + <param name="name">The form field name and <see cref="T:System.Web.Mvc.ViewDataDictionary">ViewData</see> key used to lookup the value.</param> + <param name="value">The value of the hidden input. If null, looks at the <see cref="T:System.Web.Mvc.ViewDataDictionary">ViewData</see> and then <see cref="T:System.Web.Mvc.ModelStateDictionary">ModelState</see>for the value.</param> + <param name="htmlAttributes">An object containing the html attributes for the element</param> + <returns>An input tag with the type set to "hidden"</returns> + </member> + <member name="M:System.Web.Mvc.Html.InputExtensions.Password(System.Web.Mvc.HtmlHelper,System.String)"> + <summary> + Returns a password tag. + </summary> + <param name="htmlHelper"></param> + <param name="name">The form field name and <see cref="T:System.Web.Mvc.ViewDataDictionary">ViewData</see> key used to lookup the value.</param> + <returns>An input tag with the type set to "password"</returns> + </member> + <member name="M:System.Web.Mvc.Html.InputExtensions.Password(System.Web.Mvc.HtmlHelper,System.String,System.Object)"> + <summary> + Returns a password tag. + </summary> + <param name="htmlHelper"></param> + <param name="name">The form field name and <see cref="T:System.Web.Mvc.ViewDataDictionary">ViewData</see> key used to lookup the value.</param> + <param name="value">The value of the input. If null, looks at the <see cref="T:System.Web.Mvc.ViewDataDictionary">ViewData</see> and then <see cref="T:System.Web.Mvc.ModelStateDictionary">ModelState</see>for the value.</param> + <returns>An input tag with the type set to "password"</returns> + </member> + <member name="M:System.Web.Mvc.Html.InputExtensions.Password(System.Web.Mvc.HtmlHelper,System.String,System.Object,System.Object)"> + <summary> + Returns a password tag. + </summary> + <param name="htmlHelper"></param> + <param name="name">The form field name and <see cref="T:System.Web.Mvc.ViewDataDictionary">ViewData</see> key used to lookup the value.</param> + <param name="value">The value of the input. If null, looks at the <see cref="T:System.Web.Mvc.ViewDataDictionary">ViewData</see> and then <see cref="T:System.Web.Mvc.ModelStateDictionary">ModelState</see>for the value.</param> + <param name="htmlAttributes">An object containing the html attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax</param> + <returns>An input tag with the type set to "password"</returns> + </member> + <member name="M:System.Web.Mvc.Html.InputExtensions.Password(System.Web.Mvc.HtmlHelper,System.String,System.Object,System.Collections.Generic.IDictionary{System.String,System.Object})"> + <summary> + Returns a password tag. + </summary> + <param name="htmlHelper"></param> + <param name="name">The form field name and <see cref="T:System.Web.Mvc.ViewDataDictionary">ViewData</see> key used to lookup the value.</param> + <param name="value">The value of the input. If null, looks at the <see cref="T:System.Web.Mvc.ViewDataDictionary">ViewData</see> and then <see cref="T:System.Web.Mvc.ModelStateDictionary">ModelState</see>for the value.</param> + <param name="htmlAttributes">An object containing the html attributes for the element</param> + <returns>An input tag with the type set to "password"</returns> + </member> + <member name="M:System.Web.Mvc.Html.InputExtensions.RadioButton(System.Web.Mvc.HtmlHelper,System.String,System.Object)"> + <summary> + Returns a radio button tag used to present one possible value, out of a range, for a form field specified by the name. + </summary> + <param name="htmlHelper"></param> + <param name="name">The form field name and <see cref="T:System.Web.Mvc.ViewDataDictionary">ViewData</see> key used to lookup the current value.</param> + <param name="value">If checked, the value of the radio button submitted when the form is posted. If the value in <see cref="T:System.Web.Mvc.ViewDataDictionary">ViewData</see> or <see cref="T:System.Web.Mvc.ModelStateDictionary">ModelState</see> matches this value, the radio button is checked.</param> + <returns>An input tag with the type set to "radio"</returns> + </member> + <member name="M:System.Web.Mvc.Html.InputExtensions.RadioButton(System.Web.Mvc.HtmlHelper,System.String,System.Object,System.Object)"> + <summary> + Returns a radio button tag used to present one possible value, out of a range, for a form field specified by the name. + </summary> + <param name="htmlHelper"></param> + <param name="name">The form field name and <see cref="T:System.Web.Mvc.ViewDataDictionary">ViewData</see> key used to lookup the current value.</param> + <param name="value">If checked, the value of the radio button submitted when the form is posted. If the value in <see cref="T:System.Web.Mvc.ViewDataDictionary">ViewData</see> or <see cref="T:System.Web.Mvc.ModelStateDictionary">ModelState</see> matches this value, the radio button is checked.</param> + <param name="htmlAttributes">An object containing the html attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax</param> + <returns>An input tag with the type set to "radio"</returns> + </member> + <member name="M:System.Web.Mvc.Html.InputExtensions.RadioButton(System.Web.Mvc.HtmlHelper,System.String,System.Object,System.Collections.Generic.IDictionary{System.String,System.Object})"> + <summary> + Returns a radio button tag used to present one possible value, out of a range, for a form field specified by the name. + </summary> + <param name="htmlHelper"></param> + <param name="name">The form field name and <see cref="T:System.Web.Mvc.ViewDataDictionary">ViewData</see> key used to lookup the current value.</param> + <param name="value">If checked, the value of the radio button submitted when the form is posted. If the value in <see cref="T:System.Web.Mvc.ViewDataDictionary">ViewData</see> or <see cref="T:System.Web.Mvc.ModelStateDictionary">ModelState</see> matches this value, the radio button is checked.</param> + <param name="htmlAttributes">An object containing the html attributes for the element</param> + <returns>An input tag with the type set to "radio"</returns> + </member> + <member name="M:System.Web.Mvc.Html.InputExtensions.RadioButton(System.Web.Mvc.HtmlHelper,System.String,System.Object,System.Boolean)"> + <summary> + Returns a radio button tag used to present one possible value, out of a range, for a form field specified by the name. + </summary> + <param name="htmlHelper"></param> + <param name="name">The form field name and <see cref="T:System.Web.Mvc.ViewDataDictionary">ViewData</see> key used to lookup the current value.</param> + <param name="value">If checked, the value of the radio button submitted when the form is posted. If the value in <see cref="T:System.Web.Mvc.ViewDataDictionary">ViewData</see> or <see cref="T:System.Web.Mvc.ModelStateDictionary">ModelState</see> matches this value, the radio button is checked.</param> + <param name="isChecked">Whether or not the radio button is checked</param> + <returns>An input tag with the type set to "radio"</returns> + </member> + <member name="M:System.Web.Mvc.Html.InputExtensions.RadioButton(System.Web.Mvc.HtmlHelper,System.String,System.Object,System.Boolean,System.Object)"> + <summary> + Returns a radio button tag used to present one possible value, out of a range, for a form field specified by the name. + </summary> + <param name="htmlHelper"></param> + <param name="name">The form field name and <see cref="T:System.Web.Mvc.ViewDataDictionary">ViewData</see> key used to lookup the current value.</param> + <param name="value">If checked, the value of the radio button submitted when the form is posted. If the value in <see cref="T:System.Web.Mvc.ViewDataDictionary">ViewData</see> or <see cref="T:System.Web.Mvc.ModelStateDictionary">ModelState</see> matches this value, the radio button is checked.</param> + <param name="isChecked">Whether or not the radio button is checked</param> + <param name="htmlAttributes">An object containing the html attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax</param> + <returns>An input tag with the type set to "radio"</returns> + </member> + <member name="M:System.Web.Mvc.Html.InputExtensions.RadioButton(System.Web.Mvc.HtmlHelper,System.String,System.Object,System.Boolean,System.Collections.Generic.IDictionary{System.String,System.Object})"> + <summary> + Returns a radio button tag used to present one possible value, out of a range, for a form field specified by the name. + </summary> + <param name="htmlHelper"></param> + <param name="name">The form field name and <see cref="T:System.Web.Mvc.ViewDataDictionary">ViewData</see> key used to lookup the current value.</param> + <param name="value">If checked, the value of the radio button submitted when the form is posted. If the value in <see cref="T:System.Web.Mvc.ViewDataDictionary">ViewData</see> or <see cref="T:System.Web.Mvc.ModelStateDictionary">ModelState</see> matches this value, the radio button is checked.</param> + <param name="isChecked">Whether or not the radio button is checked</param> + <param name="htmlAttributes">An object containing the html attributes for the element</param> + <returns>An input tag with the type set to "radio"</returns> + </member> + <member name="M:System.Web.Mvc.Html.InputExtensions.TextBox(System.Web.Mvc.HtmlHelper,System.String)"> + <summary> + Returns a text input tag. + </summary> + <param name="htmlHelper"></param> + <param name="name">The form field name and <see cref="T:System.Web.Mvc.ViewDataDictionary">ViewData</see> key used to lookup the value.</param> + <returns>An input tag with the type set to "text"</returns> + </member> + <member name="M:System.Web.Mvc.Html.InputExtensions.TextBox(System.Web.Mvc.HtmlHelper,System.String,System.Object)"> + <summary> + Returns a text input tag. + </summary> + <param name="htmlHelper"></param> + <param name="name">The form field name and <see cref="T:System.Web.Mvc.ViewDataDictionary">ViewData</see> key used to lookup the value.</param> + <param name="value">The value of the input. If null, looks at the <see cref="T:System.Web.Mvc.ViewDataDictionary">ViewData</see> and then <see cref="T:System.Web.Mvc.ModelStateDictionary">ModelState</see>for the value.</param> + <returns>An input tag with the type set to "text"</returns> + </member> + <member name="M:System.Web.Mvc.Html.InputExtensions.TextBox(System.Web.Mvc.HtmlHelper,System.String,System.Object,System.Object)"> + <summary> + Returns a text input tag. + </summary> + <param name="htmlHelper"></param> + <param name="name">The form field name and <see cref="T:System.Web.Mvc.ViewDataDictionary">ViewData</see> key used to lookup the value.</param> + <param name="value">The value of the input. If null, looks at the <see cref="T:System.Web.Mvc.ViewDataDictionary">ViewData</see> and then <see cref="T:System.Web.Mvc.ModelStateDictionary">ModelState</see>for the value.</param> + <param name="htmlAttributes">An object containing the html attributes for the element. The attributes are retrieved via reflection by examining the properties of the object. Typically created using object initializer syntax</param> + <returns>An input tag with the type set to "text"</returns> + </member> + <member name="M:System.Web.Mvc.Html.InputExtensions.TextBox(System.Web.Mvc.HtmlHelper,System.String,System.Object,System.Collections.Generic.IDictionary{System.String,System.Object})"> + <summary> + Returns a text input tag. + </summary> + <param name="htmlHelper"></param> + <param name="name">The form field name and <see cref="T:System.Web.Mvc.ViewDataDictionary">ViewData</see> key used to lookup the value.</param> + <param name="value">The value of the input. If null, looks at the <see cref="T:System.Web.Mvc.ViewDataDictionary">ViewData</see> and then <see cref="T:System.Web.Mvc.ModelStateDictionary">ModelState</see>for the value.</param> + <param name="htmlAttributes">An object containing the html attributes for the element</param> + <returns>An input tag with the type set to "text"</returns> + </member> + <member name="M:System.Web.Mvc.DefaultValueProviderDictionary.#ctor(System.Web.Mvc.ControllerContext)"> + <summary> + Initializes a new instance of the <see cref="T:System.Web.Mvc.DefaultValueProviderDictionary"/> + with the specified <see cref="T:System.Web.Mvc.ControllerContext"/>. + </summary> + <param name="controllerContext"></param> + </member> + <member name="T:System.Web.Mvc.BindAttribute"> + <summary> + Attribute used to provide details on how model binding to a parameter should occur. + </summary> + </member> + <member name="P:System.Web.Mvc.BindAttribute.Exclude"> + <summary> + A comma delimited black list of property names for which binding is not allowed. + </summary> + </member> + <member name="P:System.Web.Mvc.BindAttribute.Include"> + <summary> + A comma delimited white list of property names for which binding is allowed. + </summary> + </member> + <member name="P:System.Web.Mvc.BindAttribute.Prefix"> + <summary> + Gets or sets the prefix to use when binding to an action argument or model property. + </summary> + </member> + </members> +</doc> diff --git a/lib/System.Web.Routing.dll b/lib/System.Web.Routing.dll Binary files differindex 98ce397..93f0ff8 100644 --- a/lib/System.Web.Routing.dll +++ b/lib/System.Web.Routing.dll diff --git a/samples/ConsumerWpf/ConsumerWpf.csproj b/samples/ConsumerWpf/ConsumerWpf.csproj index 5b84d1c..241da1e 100644 --- a/samples/ConsumerWpf/ConsumerWpf.csproj +++ b/samples/ConsumerWpf/ConsumerWpf.csproj @@ -101,7 +101,7 @@ </ProjectReference> <ProjectReference Include="..\DotNetOpenAuth.ApplicationBlock\DotNetOpenAuth.ApplicationBlock.csproj"> <Project>{AA78D112-D889-414B-A7D4-467B34C7B663}</Project> - <Name>DotNetOAuth.ApplicationBlock</Name> + <Name>DotNetOpenAuth.ApplicationBlock</Name> </ProjectReference> </ItemGroup> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> diff --git a/samples/ProviderPortal/.gitignore b/samples/ProviderPortal/.gitignore new file mode 100644 index 0000000..b086a60 --- /dev/null +++ b/samples/ProviderPortal/.gitignore @@ -0,0 +1,5 @@ +Bin +obj +*.user +*.log +StyleCop.Cache diff --git a/samples/ProviderPortal/App_Data/.gitignore b/samples/ProviderPortal/App_Data/.gitignore new file mode 100644 index 0000000..cb89d8a --- /dev/null +++ b/samples/ProviderPortal/App_Data/.gitignore @@ -0,0 +1 @@ +*.LDF diff --git a/samples/ProviderPortal/App_Data/Users.xml b/samples/ProviderPortal/App_Data/Users.xml new file mode 100644 index 0000000..cffe009 --- /dev/null +++ b/samples/ProviderPortal/App_Data/Users.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="utf-8" ?> +<Users> + <User> + <UserName>bob</UserName> + <Password>test</Password> + </User> + <User> + <UserName>bob1</UserName> + <Password>test</Password> + </User> + <User> + <UserName>bob2</UserName> + <Password>test</Password> + </User> + <User> + <UserName>bob3</UserName> + <Password>test</Password> + </User> + <User> + <UserName>bob4</UserName> + <Password>test</Password> + </User> +</Users> diff --git a/samples/ProviderPortal/Code/CustomStore.cs b/samples/ProviderPortal/Code/CustomStore.cs new file mode 100644 index 0000000..8031a59 --- /dev/null +++ b/samples/ProviderPortal/Code/CustomStore.cs @@ -0,0 +1,89 @@ +//----------------------------------------------------------------------- +// <copyright file="CustomStore.cs" company="Andrew Arnott"> +// Copyright (c) Andrew Arnott. All rights reserved. +// </copyright> +//----------------------------------------------------------------------- + +namespace OpenIdProviderWebForms.Code { + using System; + using System.Data; + using System.Globalization; + using System.Security.Cryptography; + using DotNetOpenAuth.OpenId; + using IProviderAssociationStore = DotNetOpenAuth.OpenId.IAssociationStore<DotNetOpenAuth.OpenId.AssociationRelyingPartyType>; + + /// <summary> + /// This custom store serializes all elements to demonstrate peristent and/or shared storage. + /// This is common in a web farm, for example. + /// </summary> + /// <remarks> + /// This doesn't actually serialize anything to a persistent store, so restarting the web server + /// will still clear everything this store is supposed to remember. + /// But we "persist" all associations and nonces into a DataTable to demonstrate + /// that using a database is possible. + /// </remarks> + public class CustomStore : IProviderAssociationStore { + private static CustomStoreDataSet dataSet = new CustomStoreDataSet(); + + #region IAssociationStore<AssociationRelyingPartyType> Members + + public void StoreAssociation(AssociationRelyingPartyType distinguishingFactor, Association assoc) { + var assocRow = dataSet.Association.NewAssociationRow(); + assocRow.DistinguishingFactor = distinguishingFactor.ToString(); + assocRow.Handle = assoc.Handle; + assocRow.Expires = assoc.Expires.ToLocalTime(); + assocRow.PrivateData = assoc.SerializePrivateData(); + dataSet.Association.AddAssociationRow(assocRow); + } + + public Association GetAssociation(AssociationRelyingPartyType distinguishingFactor) { + // properly escape the URL to prevent injection attacks. + string value = distinguishingFactor.ToString(); + string filter = string.Format( + CultureInfo.InvariantCulture, + "{0} = '{1}'", + dataSet.Association.DistinguishingFactorColumn.ColumnName, + value); + string sort = dataSet.Association.ExpiresColumn.ColumnName + " DESC"; + DataView view = new DataView(dataSet.Association, filter, sort, DataViewRowState.CurrentRows); + if (view.Count == 0) { + return null; + } + var row = (CustomStoreDataSet.AssociationRow)view[0].Row; + return Association.Deserialize(row.Handle, row.Expires.ToUniversalTime(), row.PrivateData); + } + + public Association GetAssociation(AssociationRelyingPartyType distinguishingFactor, string handle) { + var assocRow = dataSet.Association.FindByDistinguishingFactorHandle(distinguishingFactor.ToString(), handle); + return Association.Deserialize(assocRow.Handle, assocRow.Expires, assocRow.PrivateData); + } + + public bool RemoveAssociation(AssociationRelyingPartyType distinguishingFactor, string handle) { + var row = dataSet.Association.FindByDistinguishingFactorHandle(distinguishingFactor.ToString(), handle); + if (row != null) { + dataSet.Association.RemoveAssociationRow(row); + return true; + } else { + return false; + } + } + + public void ClearExpiredAssociations() { + this.removeExpiredRows(dataSet.Association, dataSet.Association.ExpiresColumn.ColumnName); + } + + #endregion + + private void removeExpiredRows(DataTable table, string expiredColumnName) { + string filter = string.Format( + CultureInfo.InvariantCulture, + "{0} < #{1}#", + expiredColumnName, + DateTime.Now); + DataView view = new DataView(table, filter, null, DataViewRowState.CurrentRows); + for (int i = view.Count - 1; i >= 0; i--) { + view.Delete(i); + } + } + } +} diff --git a/samples/ProviderPortal/Code/CustomStoreDataSet.Designer.cs b/samples/ProviderPortal/Code/CustomStoreDataSet.Designer.cs new file mode 100644 index 0000000..58c20a9 --- /dev/null +++ b/samples/ProviderPortal/Code/CustomStoreDataSet.Designer.cs @@ -0,0 +1,621 @@ +//------------------------------------------------------------------------------ +// <auto-generated> +// This code was generated by a tool. +// Runtime Version:2.0.50727.3521 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// </auto-generated> +//------------------------------------------------------------------------------ + +#pragma warning disable 1591 + +namespace OpenIdProviderWebForms.Code { + + + /// <summary> + ///Represents a strongly typed in-memory cache of data. + ///</summary> + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")] + [global::System.Serializable()] + [global::System.ComponentModel.DesignerCategoryAttribute("code")] + [global::System.ComponentModel.ToolboxItem(true)] + [global::System.Xml.Serialization.XmlSchemaProviderAttribute("GetTypedDataSetSchema")] + [global::System.Xml.Serialization.XmlRootAttribute("CustomStoreDataSet")] + [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.DataSet")] + public partial class CustomStoreDataSet : global::System.Data.DataSet { + + private AssociationDataTable tableAssociation; + + private global::System.Data.SchemaSerializationMode _schemaSerializationMode = global::System.Data.SchemaSerializationMode.IncludeSchema; + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public CustomStoreDataSet() { + this.BeginInit(); + this.InitClass(); + global::System.ComponentModel.CollectionChangeEventHandler schemaChangedHandler = new global::System.ComponentModel.CollectionChangeEventHandler(this.SchemaChanged); + base.Tables.CollectionChanged += schemaChangedHandler; + base.Relations.CollectionChanged += schemaChangedHandler; + this.EndInit(); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected CustomStoreDataSet(global::System.Runtime.Serialization.SerializationInfo info, global::System.Runtime.Serialization.StreamingContext context) : + base(info, context, false) { + if ((this.IsBinarySerialized(info, context) == true)) { + this.InitVars(false); + global::System.ComponentModel.CollectionChangeEventHandler schemaChangedHandler1 = new global::System.ComponentModel.CollectionChangeEventHandler(this.SchemaChanged); + this.Tables.CollectionChanged += schemaChangedHandler1; + this.Relations.CollectionChanged += schemaChangedHandler1; + return; + } + string strSchema = ((string)(info.GetValue("XmlSchema", typeof(string)))); + if ((this.DetermineSchemaSerializationMode(info, context) == global::System.Data.SchemaSerializationMode.IncludeSchema)) { + global::System.Data.DataSet ds = new global::System.Data.DataSet(); + ds.ReadXmlSchema(new global::System.Xml.XmlTextReader(new global::System.IO.StringReader(strSchema))); + if ((ds.Tables["Association"] != null)) { + base.Tables.Add(new AssociationDataTable(ds.Tables["Association"])); + } + this.DataSetName = ds.DataSetName; + this.Prefix = ds.Prefix; + this.Namespace = ds.Namespace; + this.Locale = ds.Locale; + this.CaseSensitive = ds.CaseSensitive; + this.EnforceConstraints = ds.EnforceConstraints; + this.Merge(ds, false, global::System.Data.MissingSchemaAction.Add); + this.InitVars(); + } + else { + this.ReadXmlSchema(new global::System.Xml.XmlTextReader(new global::System.IO.StringReader(strSchema))); + } + this.GetSerializationData(info, context); + global::System.ComponentModel.CollectionChangeEventHandler schemaChangedHandler = new global::System.ComponentModel.CollectionChangeEventHandler(this.SchemaChanged); + base.Tables.CollectionChanged += schemaChangedHandler; + this.Relations.CollectionChanged += schemaChangedHandler; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.ComponentModel.Browsable(false)] + [global::System.ComponentModel.DesignerSerializationVisibility(global::System.ComponentModel.DesignerSerializationVisibility.Content)] + public AssociationDataTable Association { + get { + return this.tableAssociation; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.ComponentModel.BrowsableAttribute(true)] + [global::System.ComponentModel.DesignerSerializationVisibilityAttribute(global::System.ComponentModel.DesignerSerializationVisibility.Visible)] + public override global::System.Data.SchemaSerializationMode SchemaSerializationMode { + get { + return this._schemaSerializationMode; + } + set { + this._schemaSerializationMode = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.ComponentModel.DesignerSerializationVisibilityAttribute(global::System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public new global::System.Data.DataTableCollection Tables { + get { + return base.Tables; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.ComponentModel.DesignerSerializationVisibilityAttribute(global::System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public new global::System.Data.DataRelationCollection Relations { + get { + return base.Relations; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override void InitializeDerivedDataSet() { + this.BeginInit(); + this.InitClass(); + this.EndInit(); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public override global::System.Data.DataSet Clone() { + CustomStoreDataSet cln = ((CustomStoreDataSet)(base.Clone())); + cln.InitVars(); + cln.SchemaSerializationMode = this.SchemaSerializationMode; + return cln; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override bool ShouldSerializeTables() { + return false; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override bool ShouldSerializeRelations() { + return false; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override void ReadXmlSerializable(global::System.Xml.XmlReader reader) { + if ((this.DetermineSchemaSerializationMode(reader) == global::System.Data.SchemaSerializationMode.IncludeSchema)) { + this.Reset(); + global::System.Data.DataSet ds = new global::System.Data.DataSet(); + ds.ReadXml(reader); + if ((ds.Tables["Association"] != null)) { + base.Tables.Add(new AssociationDataTable(ds.Tables["Association"])); + } + this.DataSetName = ds.DataSetName; + this.Prefix = ds.Prefix; + this.Namespace = ds.Namespace; + this.Locale = ds.Locale; + this.CaseSensitive = ds.CaseSensitive; + this.EnforceConstraints = ds.EnforceConstraints; + this.Merge(ds, false, global::System.Data.MissingSchemaAction.Add); + this.InitVars(); + } + else { + this.ReadXml(reader); + this.InitVars(); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override global::System.Xml.Schema.XmlSchema GetSchemaSerializable() { + global::System.IO.MemoryStream stream = new global::System.IO.MemoryStream(); + this.WriteXmlSchema(new global::System.Xml.XmlTextWriter(stream, null)); + stream.Position = 0; + return global::System.Xml.Schema.XmlSchema.Read(new global::System.Xml.XmlTextReader(stream), null); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + internal void InitVars() { + this.InitVars(true); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + internal void InitVars(bool initTable) { + this.tableAssociation = ((AssociationDataTable)(base.Tables["Association"])); + if ((initTable == true)) { + if ((this.tableAssociation != null)) { + this.tableAssociation.InitVars(); + } + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + private void InitClass() { + this.DataSetName = "CustomStoreDataSet"; + this.Prefix = ""; + this.Namespace = "http://tempuri.org/CustomStoreDataSet.xsd"; + this.EnforceConstraints = true; + this.SchemaSerializationMode = global::System.Data.SchemaSerializationMode.IncludeSchema; + this.tableAssociation = new AssociationDataTable(); + base.Tables.Add(this.tableAssociation); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + private bool ShouldSerializeAssociation() { + return false; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + private void SchemaChanged(object sender, global::System.ComponentModel.CollectionChangeEventArgs e) { + if ((e.Action == global::System.ComponentModel.CollectionChangeAction.Remove)) { + this.InitVars(); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public static global::System.Xml.Schema.XmlSchemaComplexType GetTypedDataSetSchema(global::System.Xml.Schema.XmlSchemaSet xs) { + CustomStoreDataSet ds = new CustomStoreDataSet(); + global::System.Xml.Schema.XmlSchemaComplexType type = new global::System.Xml.Schema.XmlSchemaComplexType(); + global::System.Xml.Schema.XmlSchemaSequence sequence = new global::System.Xml.Schema.XmlSchemaSequence(); + global::System.Xml.Schema.XmlSchemaAny any = new global::System.Xml.Schema.XmlSchemaAny(); + any.Namespace = ds.Namespace; + sequence.Items.Add(any); + type.Particle = sequence; + global::System.Xml.Schema.XmlSchema dsSchema = ds.GetSchemaSerializable(); + if (xs.Contains(dsSchema.TargetNamespace)) { + global::System.IO.MemoryStream s1 = new global::System.IO.MemoryStream(); + global::System.IO.MemoryStream s2 = new global::System.IO.MemoryStream(); + try { + global::System.Xml.Schema.XmlSchema schema = null; + dsSchema.Write(s1); + for (global::System.Collections.IEnumerator schemas = xs.Schemas(dsSchema.TargetNamespace).GetEnumerator(); schemas.MoveNext(); ) { + schema = ((global::System.Xml.Schema.XmlSchema)(schemas.Current)); + s2.SetLength(0); + schema.Write(s2); + if ((s1.Length == s2.Length)) { + s1.Position = 0; + s2.Position = 0; + for (; ((s1.Position != s1.Length) + && (s1.ReadByte() == s2.ReadByte())); ) { + ; + } + if ((s1.Position == s1.Length)) { + return type; + } + } + } + } + finally { + if ((s1 != null)) { + s1.Close(); + } + if ((s2 != null)) { + s2.Close(); + } + } + } + xs.Add(dsSchema); + return type; + } + + public delegate void AssociationRowChangeEventHandler(object sender, AssociationRowChangeEvent e); + + /// <summary> + ///Represents the strongly named DataTable class. + ///</summary> + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")] + [global::System.Serializable()] + [global::System.Xml.Serialization.XmlSchemaProviderAttribute("GetTypedTableSchema")] + public partial class AssociationDataTable : global::System.Data.TypedTableBase<AssociationRow> { + + private global::System.Data.DataColumn columnDistinguishingFactor; + + private global::System.Data.DataColumn columnHandle; + + private global::System.Data.DataColumn columnExpires; + + private global::System.Data.DataColumn columnPrivateData; + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public AssociationDataTable() { + this.TableName = "Association"; + this.BeginInit(); + this.InitClass(); + this.EndInit(); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + internal AssociationDataTable(global::System.Data.DataTable table) { + this.TableName = table.TableName; + if ((table.CaseSensitive != table.DataSet.CaseSensitive)) { + this.CaseSensitive = table.CaseSensitive; + } + if ((table.Locale.ToString() != table.DataSet.Locale.ToString())) { + this.Locale = table.Locale; + } + if ((table.Namespace != table.DataSet.Namespace)) { + this.Namespace = table.Namespace; + } + this.Prefix = table.Prefix; + this.MinimumCapacity = table.MinimumCapacity; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected AssociationDataTable(global::System.Runtime.Serialization.SerializationInfo info, global::System.Runtime.Serialization.StreamingContext context) : + base(info, context) { + this.InitVars(); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public global::System.Data.DataColumn DistinguishingFactorColumn { + get { + return this.columnDistinguishingFactor; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public global::System.Data.DataColumn HandleColumn { + get { + return this.columnHandle; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public global::System.Data.DataColumn ExpiresColumn { + get { + return this.columnExpires; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public global::System.Data.DataColumn PrivateDataColumn { + get { + return this.columnPrivateData; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.ComponentModel.Browsable(false)] + public int Count { + get { + return this.Rows.Count; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public AssociationRow this[int index] { + get { + return ((AssociationRow)(this.Rows[index])); + } + } + + public event AssociationRowChangeEventHandler AssociationRowChanging; + + public event AssociationRowChangeEventHandler AssociationRowChanged; + + public event AssociationRowChangeEventHandler AssociationRowDeleting; + + public event AssociationRowChangeEventHandler AssociationRowDeleted; + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public void AddAssociationRow(AssociationRow row) { + this.Rows.Add(row); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public AssociationRow AddAssociationRow(string DistinguishingFactor, string Handle, System.DateTime Expires, byte[] PrivateData) { + AssociationRow rowAssociationRow = ((AssociationRow)(this.NewRow())); + object[] columnValuesArray = new object[] { + DistinguishingFactor, + Handle, + Expires, + PrivateData}; + rowAssociationRow.ItemArray = columnValuesArray; + this.Rows.Add(rowAssociationRow); + return rowAssociationRow; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public AssociationRow FindByDistinguishingFactorHandle(string DistinguishingFactor, string Handle) { + return ((AssociationRow)(this.Rows.Find(new object[] { + DistinguishingFactor, + Handle}))); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public override global::System.Data.DataTable Clone() { + AssociationDataTable cln = ((AssociationDataTable)(base.Clone())); + cln.InitVars(); + return cln; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override global::System.Data.DataTable CreateInstance() { + return new AssociationDataTable(); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + internal void InitVars() { + this.columnDistinguishingFactor = base.Columns["DistinguishingFactor"]; + this.columnHandle = base.Columns["Handle"]; + this.columnExpires = base.Columns["Expires"]; + this.columnPrivateData = base.Columns["PrivateData"]; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + private void InitClass() { + this.columnDistinguishingFactor = new global::System.Data.DataColumn("DistinguishingFactor", typeof(string), null, global::System.Data.MappingType.Element); + base.Columns.Add(this.columnDistinguishingFactor); + this.columnHandle = new global::System.Data.DataColumn("Handle", typeof(string), null, global::System.Data.MappingType.Element); + base.Columns.Add(this.columnHandle); + this.columnExpires = new global::System.Data.DataColumn("Expires", typeof(global::System.DateTime), null, global::System.Data.MappingType.Element); + base.Columns.Add(this.columnExpires); + this.columnPrivateData = new global::System.Data.DataColumn("PrivateData", typeof(byte[]), null, global::System.Data.MappingType.Element); + base.Columns.Add(this.columnPrivateData); + this.Constraints.Add(new global::System.Data.UniqueConstraint("PrimaryKey", new global::System.Data.DataColumn[] { + this.columnDistinguishingFactor, + this.columnHandle}, true)); + this.columnDistinguishingFactor.AllowDBNull = false; + this.columnHandle.AllowDBNull = false; + this.columnExpires.AllowDBNull = false; + this.columnPrivateData.AllowDBNull = false; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public AssociationRow NewAssociationRow() { + return ((AssociationRow)(this.NewRow())); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override global::System.Data.DataRow NewRowFromBuilder(global::System.Data.DataRowBuilder builder) { + return new AssociationRow(builder); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override global::System.Type GetRowType() { + return typeof(AssociationRow); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override void OnRowChanged(global::System.Data.DataRowChangeEventArgs e) { + base.OnRowChanged(e); + if ((this.AssociationRowChanged != null)) { + this.AssociationRowChanged(this, new AssociationRowChangeEvent(((AssociationRow)(e.Row)), e.Action)); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override void OnRowChanging(global::System.Data.DataRowChangeEventArgs e) { + base.OnRowChanging(e); + if ((this.AssociationRowChanging != null)) { + this.AssociationRowChanging(this, new AssociationRowChangeEvent(((AssociationRow)(e.Row)), e.Action)); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override void OnRowDeleted(global::System.Data.DataRowChangeEventArgs e) { + base.OnRowDeleted(e); + if ((this.AssociationRowDeleted != null)) { + this.AssociationRowDeleted(this, new AssociationRowChangeEvent(((AssociationRow)(e.Row)), e.Action)); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override void OnRowDeleting(global::System.Data.DataRowChangeEventArgs e) { + base.OnRowDeleting(e); + if ((this.AssociationRowDeleting != null)) { + this.AssociationRowDeleting(this, new AssociationRowChangeEvent(((AssociationRow)(e.Row)), e.Action)); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public void RemoveAssociationRow(AssociationRow row) { + this.Rows.Remove(row); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public static global::System.Xml.Schema.XmlSchemaComplexType GetTypedTableSchema(global::System.Xml.Schema.XmlSchemaSet xs) { + global::System.Xml.Schema.XmlSchemaComplexType type = new global::System.Xml.Schema.XmlSchemaComplexType(); + global::System.Xml.Schema.XmlSchemaSequence sequence = new global::System.Xml.Schema.XmlSchemaSequence(); + CustomStoreDataSet ds = new CustomStoreDataSet(); + global::System.Xml.Schema.XmlSchemaAny any1 = new global::System.Xml.Schema.XmlSchemaAny(); + any1.Namespace = "http://www.w3.org/2001/XMLSchema"; + any1.MinOccurs = new decimal(0); + any1.MaxOccurs = decimal.MaxValue; + any1.ProcessContents = global::System.Xml.Schema.XmlSchemaContentProcessing.Lax; + sequence.Items.Add(any1); + global::System.Xml.Schema.XmlSchemaAny any2 = new global::System.Xml.Schema.XmlSchemaAny(); + any2.Namespace = "urn:schemas-microsoft-com:xml-diffgram-v1"; + any2.MinOccurs = new decimal(1); + any2.ProcessContents = global::System.Xml.Schema.XmlSchemaContentProcessing.Lax; + sequence.Items.Add(any2); + global::System.Xml.Schema.XmlSchemaAttribute attribute1 = new global::System.Xml.Schema.XmlSchemaAttribute(); + attribute1.Name = "namespace"; + attribute1.FixedValue = ds.Namespace; + type.Attributes.Add(attribute1); + global::System.Xml.Schema.XmlSchemaAttribute attribute2 = new global::System.Xml.Schema.XmlSchemaAttribute(); + attribute2.Name = "tableTypeName"; + attribute2.FixedValue = "AssociationDataTable"; + type.Attributes.Add(attribute2); + type.Particle = sequence; + global::System.Xml.Schema.XmlSchema dsSchema = ds.GetSchemaSerializable(); + if (xs.Contains(dsSchema.TargetNamespace)) { + global::System.IO.MemoryStream s1 = new global::System.IO.MemoryStream(); + global::System.IO.MemoryStream s2 = new global::System.IO.MemoryStream(); + try { + global::System.Xml.Schema.XmlSchema schema = null; + dsSchema.Write(s1); + for (global::System.Collections.IEnumerator schemas = xs.Schemas(dsSchema.TargetNamespace).GetEnumerator(); schemas.MoveNext(); ) { + schema = ((global::System.Xml.Schema.XmlSchema)(schemas.Current)); + s2.SetLength(0); + schema.Write(s2); + if ((s1.Length == s2.Length)) { + s1.Position = 0; + s2.Position = 0; + for (; ((s1.Position != s1.Length) + && (s1.ReadByte() == s2.ReadByte())); ) { + ; + } + if ((s1.Position == s1.Length)) { + return type; + } + } + } + } + finally { + if ((s1 != null)) { + s1.Close(); + } + if ((s2 != null)) { + s2.Close(); + } + } + } + xs.Add(dsSchema); + return type; + } + } + + /// <summary> + ///Represents strongly named DataRow class. + ///</summary> + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")] + public partial class AssociationRow : global::System.Data.DataRow { + + private AssociationDataTable tableAssociation; + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + internal AssociationRow(global::System.Data.DataRowBuilder rb) : + base(rb) { + this.tableAssociation = ((AssociationDataTable)(this.Table)); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public string DistinguishingFactor { + get { + return ((string)(this[this.tableAssociation.DistinguishingFactorColumn])); + } + set { + this[this.tableAssociation.DistinguishingFactorColumn] = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public string Handle { + get { + return ((string)(this[this.tableAssociation.HandleColumn])); + } + set { + this[this.tableAssociation.HandleColumn] = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public System.DateTime Expires { + get { + return ((global::System.DateTime)(this[this.tableAssociation.ExpiresColumn])); + } + set { + this[this.tableAssociation.ExpiresColumn] = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public byte[] PrivateData { + get { + return ((byte[])(this[this.tableAssociation.PrivateDataColumn])); + } + set { + this[this.tableAssociation.PrivateDataColumn] = value; + } + } + } + + /// <summary> + ///Row event argument class + ///</summary> + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")] + public class AssociationRowChangeEvent : global::System.EventArgs { + + private AssociationRow eventRow; + + private global::System.Data.DataRowAction eventAction; + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public AssociationRowChangeEvent(AssociationRow row, global::System.Data.DataRowAction action) { + this.eventRow = row; + this.eventAction = action; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public AssociationRow Row { + get { + return this.eventRow; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public global::System.Data.DataRowAction Action { + get { + return this.eventAction; + } + } + } + } +} + +#pragma warning restore 1591
\ No newline at end of file diff --git a/samples/ProviderPortal/Code/CustomStoreDataSet.xsc b/samples/ProviderPortal/Code/CustomStoreDataSet.xsc new file mode 100644 index 0000000..05b0199 --- /dev/null +++ b/samples/ProviderPortal/Code/CustomStoreDataSet.xsc @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--<autogenerated> + This code was generated by a tool. + Changes to this file may cause incorrect behavior and will be lost if + the code is regenerated. +</autogenerated>--> +<DataSetUISetting Version="1.00" xmlns="urn:schemas-microsoft-com:xml-msdatasource"> + <TableUISettings /> +</DataSetUISetting>
\ No newline at end of file diff --git a/samples/ProviderPortal/Code/CustomStoreDataSet.xsd b/samples/ProviderPortal/Code/CustomStoreDataSet.xsd new file mode 100644 index 0000000..63226bd --- /dev/null +++ b/samples/ProviderPortal/Code/CustomStoreDataSet.xsd @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="utf-8"?> +<xs:schema id="CustomStoreDataSet" targetNamespace="http://tempuri.org/CustomStoreDataSet.xsd" xmlns:mstns="http://tempuri.org/CustomStoreDataSet.xsd" xmlns="http://tempuri.org/CustomStoreDataSet.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:msprop="urn:schemas-microsoft-com:xml-msprop" attributeFormDefault="qualified" elementFormDefault="qualified"> + <xs:annotation> + <xs:appinfo source="urn:schemas-microsoft-com:xml-msdatasource"> + <DataSource DefaultConnectionIndex="0" FunctionsComponentName="QueriesTableAdapter" Modifier="AutoLayout, AnsiClass, Class, Public" SchemaSerializationMode="IncludeSchema" xmlns="urn:schemas-microsoft-com:xml-msdatasource"> + <Connections /> + <Tables /> + <Sources /> + </DataSource> + </xs:appinfo> + </xs:annotation> + <xs:element name="CustomStoreDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true" msprop:Generator_UserDSName="CustomStoreDataSet" msprop:Generator_DataSetName="CustomStoreDataSet" msprop:EnableTableAdapterManager="true"> + <xs:complexType> + <xs:choice minOccurs="0" maxOccurs="unbounded"> + <xs:element name="Association" msprop:Generator_UserTableName="Association" msprop:Generator_RowDeletedName="AssociationRowDeleted" msprop:Generator_RowChangedName="AssociationRowChanged" msprop:Generator_RowClassName="AssociationRow" msprop:Generator_RowChangingName="AssociationRowChanging" msprop:Generator_RowEvArgName="AssociationRowChangeEvent" msprop:Generator_RowEvHandlerName="AssociationRowChangeEventHandler" msprop:Generator_TableClassName="AssociationDataTable" msprop:Generator_TableVarName="tableAssociation" msprop:Generator_RowDeletingName="AssociationRowDeleting" msprop:Generator_TablePropName="Association"> + <xs:complexType> + <xs:sequence> + <xs:element name="DistinguishingFactor" msprop:Generator_UserColumnName="DistinguishingFactor" msprop:Generator_ColumnPropNameInRow="DistinguishingFactor" msprop:Generator_ColumnVarNameInTable="columnDistinguishingFactor" msprop:Generator_ColumnPropNameInTable="DistinguishingFactorColumn" type="xs:string" /> + <xs:element name="Handle" msprop:Generator_UserColumnName="Handle" msprop:Generator_ColumnPropNameInRow="Handle" msprop:Generator_ColumnVarNameInTable="columnHandle" msprop:Generator_ColumnPropNameInTable="HandleColumn" type="xs:string" /> + <xs:element name="Expires" msprop:Generator_UserColumnName="Expires" msprop:Generator_ColumnPropNameInRow="Expires" msprop:Generator_ColumnVarNameInTable="columnExpires" msprop:Generator_ColumnPropNameInTable="ExpiresColumn" type="xs:dateTime" /> + <xs:element name="PrivateData" msprop:Generator_UserColumnName="PrivateData" msprop:Generator_ColumnPropNameInRow="PrivateData" msprop:Generator_ColumnVarNameInTable="columnPrivateData" msprop:Generator_ColumnPropNameInTable="PrivateDataColumn" type="xs:base64Binary" /> + </xs:sequence> + </xs:complexType> + </xs:element> + </xs:choice> + </xs:complexType> + <xs:unique name="PrimaryKey" msdata:PrimaryKey="true"> + <xs:selector xpath=".//mstns:Association" /> + <xs:field xpath="mstns:DistinguishingFactor" /> + <xs:field xpath="mstns:Handle" /> + </xs:unique> + </xs:element> +</xs:schema>
\ No newline at end of file diff --git a/samples/ProviderPortal/Code/CustomStoreDataSet.xss b/samples/ProviderPortal/Code/CustomStoreDataSet.xss new file mode 100644 index 0000000..0b3972e --- /dev/null +++ b/samples/ProviderPortal/Code/CustomStoreDataSet.xss @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--<autogenerated> + This code was generated by a tool to store the dataset designer's layout information. + Changes to this file may cause incorrect behavior and will be lost if + the code is regenerated. +</autogenerated>--> +<DiagramLayout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" ex:showrelationlabel="False" ViewPortX="0" ViewPortY="0" xmlns:ex="urn:schemas-microsoft-com:xml-msdatasource-layout-extended" xmlns="urn:schemas-microsoft-com:xml-msdatasource-layout"> + <Shapes> + <Shape ID="DesignTable:Association" ZOrder="1" X="349" Y="83" Height="105" Width="154" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="101" /> + </Shapes> + <Connectors /> +</DiagramLayout>
\ No newline at end of file diff --git a/samples/ProviderPortal/Code/ReadOnlyXmlMembershipProvider.cs b/samples/ProviderPortal/Code/ReadOnlyXmlMembershipProvider.cs new file mode 100644 index 0000000..54db5c0 --- /dev/null +++ b/samples/ProviderPortal/Code/ReadOnlyXmlMembershipProvider.cs @@ -0,0 +1,270 @@ +namespace OpenIdProviderWebForms.Code { + using System; + using System.Collections.Generic; + using System.Collections.Specialized; + using System.Configuration.Provider; + using System.Security.Permissions; + using System.Web; + using System.Web.Hosting; + using System.Web.Security; + using System.Xml; + + public class ReadOnlyXmlMembershipProvider : MembershipProvider { + private Dictionary<string, MembershipUser> users; + private string xmlFileName; + + // MembershipProvider Properties + public override string ApplicationName { + get { throw new NotSupportedException(); } + set { throw new NotSupportedException(); } + } + + public override bool EnablePasswordRetrieval { + get { return false; } + } + + public override bool EnablePasswordReset { + get { return false; } + } + + public override int MaxInvalidPasswordAttempts { + get { throw new NotSupportedException(); } + } + + public override int MinRequiredNonAlphanumericCharacters { + get { throw new NotSupportedException(); } + } + + public override int MinRequiredPasswordLength { + get { throw new NotSupportedException(); } + } + + public override int PasswordAttemptWindow { + get { throw new NotSupportedException(); } + } + + public override MembershipPasswordFormat PasswordFormat { + get { throw new NotSupportedException(); } + } + + public override string PasswordStrengthRegularExpression { + get { throw new NotSupportedException(); } + } + + public override bool RequiresQuestionAndAnswer { + get { throw new NotSupportedException(); } + } + + public override bool RequiresUniqueEmail { + get { throw new NotSupportedException(); } + } + + // MembershipProvider Methods + public override void Initialize(string name, NameValueCollection config) { + // Verify that config isn't null + if (config == null) { + throw new ArgumentNullException("config"); + } + + // Assign the provider a default name if it doesn't have one + if (string.IsNullOrEmpty(name)) { + name = "ReadOnlyXmlMembershipProvider"; + } + + // Add a default "description" attribute to config if the + // attribute doesn't exist or is empty + if (string.IsNullOrEmpty(config["description"])) { + config.Remove("description"); + config.Add("description", "Read-only XML membership provider"); + } + + // Call the base class's Initialize method + base.Initialize(name, config); + + // Initialize _XmlFileName and make sure the path + // is app-relative + string path = config["xmlFileName"]; + + if (string.IsNullOrEmpty(path)) { + path = "~/App_Data/Users.xml"; + } + + if (!VirtualPathUtility.IsAppRelative(path)) { + throw new ArgumentException("xmlFileName must be app-relative"); + } + + string fullyQualifiedPath = VirtualPathUtility.Combine( + VirtualPathUtility.AppendTrailingSlash(HttpRuntime.AppDomainAppVirtualPath), + path); + + this.xmlFileName = HostingEnvironment.MapPath(fullyQualifiedPath); + config.Remove("xmlFileName"); + + // Make sure we have permission to read the XML data source and + // throw an exception if we don't + FileIOPermission permission = new FileIOPermission(FileIOPermissionAccess.Read, this.xmlFileName); + permission.Demand(); + + // Throw an exception if unrecognized attributes remain + if (config.Count > 0) { + string attr = config.GetKey(0); + if (!string.IsNullOrEmpty(attr)) { + throw new ProviderException("Unrecognized attribute: " + attr); + } + } + } + + public override bool ValidateUser(string username, string password) { + // Validate input parameters + if (string.IsNullOrEmpty(username) || + string.IsNullOrEmpty(password)) { + return false; + } + + try { + // Make sure the data source has been loaded + this.ReadMembershipDataStore(); + + // Validate the user name and password + MembershipUser user; + if (this.users.TryGetValue(username, out user)) { + if (user.Comment == password) { // Case-sensitive + // NOTE: A read/write membership provider + // would update the user's LastLoginDate here. + // A fully featured provider would also fire + // an AuditMembershipAuthenticationSuccess + // Web event + return true; + } + } + + // NOTE: A fully featured membership provider would + // fire an AuditMembershipAuthenticationFailure + // Web event here + return false; + } catch (Exception) { + return false; + } + } + + public override MembershipUser GetUser(string username, bool userIsOnline) { + // Note: This implementation ignores userIsOnline + + // Validate input parameters + if (string.IsNullOrEmpty(username)) { + return null; + } + + // Make sure the data source has been loaded + this.ReadMembershipDataStore(); + + // Retrieve the user from the data source + MembershipUser user; + if (this.users.TryGetValue(username, out user)) { + return user; + } + + return null; + } + + public override MembershipUserCollection GetAllUsers(int pageIndex, int pageSize, out int totalRecords) { + // Note: This implementation ignores pageIndex and pageSize, + // and it doesn't sort the MembershipUser objects returned + + // Make sure the data source has been loaded + this.ReadMembershipDataStore(); + + MembershipUserCollection users = new MembershipUserCollection(); + + foreach (KeyValuePair<string, MembershipUser> pair in this.users) { + users.Add(pair.Value); + } + + totalRecords = users.Count; + return users; + } + + public override int GetNumberOfUsersOnline() { + throw new NotSupportedException(); + } + + public override bool ChangePassword(string username, string oldPassword, string newPassword) { + throw new NotSupportedException(); + } + + public override bool ChangePasswordQuestionAndAnswer(string username, string password, string newPasswordQuestion, string newPasswordAnswer) { + throw new NotSupportedException(); + } + + public override MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status) { + throw new NotSupportedException(); + } + + public override bool DeleteUser(string username, bool deleteAllRelatedData) { + throw new NotSupportedException(); + } + + public override MembershipUserCollection FindUsersByEmail(string emailToMatch, int pageIndex, int pageSize, out int totalRecords) { + throw new NotSupportedException(); + } + + public override MembershipUserCollection FindUsersByName(string usernameToMatch, int pageIndex, int pageSize, out int totalRecords) { + throw new NotSupportedException(); + } + + public override string GetPassword(string username, string answer) { + throw new NotSupportedException(); + } + + public override MembershipUser GetUser(object providerUserKey, bool userIsOnline) { + throw new NotSupportedException(); + } + + public override string GetUserNameByEmail(string email) { + throw new NotSupportedException(); + } + + public override string ResetPassword(string username, string answer) { + throw new NotSupportedException(); + } + + public override bool UnlockUser(string userName) { + throw new NotSupportedException(); + } + + public override void UpdateUser(MembershipUser user) { + throw new NotSupportedException(); + } + + // Helper method + private void ReadMembershipDataStore() { + lock (this) { + if (this.users == null) { + this.users = new Dictionary<string, MembershipUser>(16, StringComparer.InvariantCultureIgnoreCase); + XmlDocument doc = new XmlDocument(); + doc.Load(this.xmlFileName); + XmlNodeList nodes = doc.GetElementsByTagName("User"); + + foreach (XmlNode node in nodes) { + MembershipUser user = new MembershipUser( + Name, // Provider name + node["UserName"].InnerText, // Username + null, // providerUserKey + null, // Email + string.Empty, // passwordQuestion + node["Password"].InnerText, // Comment + true, // isApproved + false, // isLockedOut + DateTime.Now, // creationDate + DateTime.Now, // lastLoginDate + DateTime.Now, // lastActivityDate + DateTime.Now, // lastPasswordChangedDate + new DateTime(1980, 1, 1)); // lastLockoutDate + + this.users.Add(user.UserName, user); + } + } + } + } + } +}
\ No newline at end of file diff --git a/samples/ProviderPortal/Code/TracePageAppender.cs b/samples/ProviderPortal/Code/TracePageAppender.cs new file mode 100644 index 0000000..1bb7a34 --- /dev/null +++ b/samples/ProviderPortal/Code/TracePageAppender.cs @@ -0,0 +1,13 @@ +namespace OpenIdProviderWebForms.Code { + using System; + using System.Collections.Generic; + using System.IO; + using System.Web; + + public class TracePageAppender : log4net.Appender.AppenderSkeleton { + protected override void Append(log4net.Core.LoggingEvent loggingEvent) { + StringWriter sw = new StringWriter(Global.LogMessages); + Layout.Format(sw, loggingEvent); + } + } +} diff --git a/samples/ProviderPortal/Code/URLRewriter.cs b/samples/ProviderPortal/Code/URLRewriter.cs new file mode 100644 index 0000000..daa4dea --- /dev/null +++ b/samples/ProviderPortal/Code/URLRewriter.cs @@ -0,0 +1,61 @@ +namespace OpenIdProviderWebForms.Code { + using System.Configuration; + using System.Diagnostics; + using System.Text.RegularExpressions; + using System.Web; + using System.Xml; + + // nicked from http://www.codeproject.com/aspnet/URLRewriter.asp + public class URLRewriter : IConfigurationSectionHandler { + public static log4net.ILog Logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); + + protected XmlNode rules = null; + + protected URLRewriter() { + } + + public static void Process() { + URLRewriter rewriter = (URLRewriter)ConfigurationManager.GetSection("urlrewrites"); + + string subst = rewriter.GetSubstitution(HttpContext.Current.Request.Path); + + if (!string.IsNullOrEmpty(subst)) { + Logger.InfoFormat("Rewriting url '{0}' to '{1}' ", HttpContext.Current.Request.Path, subst); + HttpContext.Current.RewritePath(subst); + } + } + + public string GetSubstitution(string path) { + foreach (XmlNode node in this.rules.SelectNodes("rule")) { + // get the url and rewrite nodes + XmlNode urlNode = node.SelectSingleNode("url"); + XmlNode rewriteNode = node.SelectSingleNode("rewrite"); + + // check validity of the values + if (urlNode == null || string.IsNullOrEmpty(urlNode.InnerText) + || rewriteNode == null || string.IsNullOrEmpty(rewriteNode.InnerText)) { + Logger.Warn("Invalid urlrewrites rule discovered in web.config file."); + continue; + } + + Regex reg = new Regex(urlNode.InnerText, RegexOptions.IgnoreCase); + + // if match, return the substitution + Match match = reg.Match(path); + if (match.Success) { + return reg.Replace(path, rewriteNode.InnerText); + } + } + + return null; // no rewrite + } + + #region Implementation of IConfigurationSectionHandler + public object Create(object parent, object configContext, XmlNode section) { + this.rules = section; + + return this; + } + #endregion + } +}
\ No newline at end of file diff --git a/samples/ProviderPortal/Code/Util.cs b/samples/ProviderPortal/Code/Util.cs new file mode 100644 index 0000000..5cec951 --- /dev/null +++ b/samples/ProviderPortal/Code/Util.cs @@ -0,0 +1,56 @@ +//----------------------------------------------------------------------- +// <copyright file="Util.cs" company="Andrew Arnott"> +// Copyright (c) Andrew Arnott. All rights reserved. +// </copyright> +//----------------------------------------------------------------------- + +namespace OpenIdProviderWebForms.Code { + using System; + using System.Collections.Generic; + using System.Diagnostics; + using System.Net; + using System.Text; + using System.Web; + using DotNetOpenAuth.OpenId; + using DotNetOpenAuth.OpenId.Provider; + + public class Util { + public static string ExtractUserName(Uri url) { + return url.Segments[url.Segments.Length - 1]; + } + + public static string ExtractUserName(Identifier identifier) { + return ExtractUserName(new Uri(identifier.ToString())); + } + + public static Identifier BuildIdentityUrl() { + string username = HttpContext.Current.User.Identity.Name; + + // be sure to normalize case the way the user's identity page does. + username = username.Substring(0, 1).ToUpperInvariant() + username.Substring(1).ToLowerInvariant(); + return new Uri(HttpContext.Current.Request.Url, "/user/" + username); + } + + internal static void ProcessAuthenticationChallenge(IAuthenticationRequest idrequest) { + if (idrequest.Immediate) { + if (idrequest.IsDirectedIdentity) { + if (HttpContext.Current.User.Identity.IsAuthenticated) { + idrequest.LocalIdentifier = Util.BuildIdentityUrl(); + idrequest.IsAuthenticated = true; + } else { + idrequest.IsAuthenticated = false; + } + } else { + string userOwningOpenIdUrl = Util.ExtractUserName(idrequest.LocalIdentifier); + + // NOTE: in a production provider site, you may want to only + // respond affirmatively if the user has already authorized this consumer + // to know the answer. + idrequest.IsAuthenticated = userOwningOpenIdUrl == HttpContext.Current.User.Identity.Name; + } + } else { + HttpContext.Current.Response.Redirect("~/decide.aspx", true); + } + } + } +}
\ No newline at end of file diff --git a/samples/ProviderPortal/Default.aspx b/samples/ProviderPortal/Default.aspx new file mode 100644 index 0000000..a0cb02a --- /dev/null +++ b/samples/ProviderPortal/Default.aspx @@ -0,0 +1,53 @@ +<%@ Page Language="C#" AutoEventWireup="true" MasterPageFile="~/Site.Master" %> + +<%@ Import Namespace="OpenIdProviderWebForms.Code" %> +<%@ Import Namespace="DotNetOpenAuth.OpenId.Provider" %> +<%@ Import Namespace="DotNetOpenAuth.Messaging" %> +<%@ Register Assembly="DotNetOpenAuth" Namespace="DotNetOpenAuth.OpenId" TagPrefix="openid" %> +<%@ Register Assembly="DotNetOpenAuth" Namespace="DotNetOpenAuth" TagPrefix="openauth" %> + +<script runat="server"> + protected void sendAssertionButton_Click(object sender, EventArgs e) { + TextBox relyingPartySite = (TextBox)loginView.FindControl("relyingPartySite"); + Uri providerEndpoint = new Uri(Request.Url, Page.ResolveUrl("~/server.aspx")); + OpenIdProvider op = new OpenIdProvider(); + try { + op.PrepareUnsolicitedAssertion(providerEndpoint, relyingPartySite.Text, Util.BuildIdentityUrl(), Util.BuildIdentityUrl()).Send(); + } catch (ProtocolException ex) { + Label errorLabel = (Label)loginView.FindControl("errorLabel"); + errorLabel.Visible = true; + errorLabel.Text = ex.Message; + } + } +</script> + +<asp:Content runat="server" ContentPlaceHolderID="head"> + <openauth:XrdsPublisher runat="server" XrdsUrl="~/op_xrds.aspx" /> +</asp:Content> +<asp:Content runat="server" ContentPlaceHolderID="Main"> + <h2>Provider </h2> + <p>Welcome. This site doesn't do anything more than simple authentication of users. + Start the authentication process on the Relying Party sample site, or log in here + and send an unsolicited assertion. </p> + <asp:LoginView runat="server" ID="loginView"> + <LoggedInTemplate> + <asp:Panel runat="server" DefaultButton="sendAssertionButton"> + Since you're logged in, try sending an unsolicited assertion to an OpenID 2.0 relying + party site. Just type in the URL to the site's home page. This could be the sample + relying party web site. + <br /> + <asp:TextBox runat="server" ID="relyingPartySite" Columns="40" /> + <asp:Button runat="server" ID="sendAssertionButton" Text="Send assertion" OnClick="sendAssertionButton_Click" /> + <asp:RequiredFieldValidator runat="server" ControlToValidate="relyingPartySite" Text="Specify relying party site first" /> + <br /> + An unsolicited assertion is a way to log in to a relying party site directly from + your OpenID Provider. + <p> + <asp:Label runat="server" EnableViewState="false" Visible="false" ID="errorLabel" + ForeColor="Red" /> + </p> + </asp:Panel> + </LoggedInTemplate> + </asp:LoginView> + <asp:LoginStatus runat="server" /> +</asp:Content> diff --git a/samples/ProviderPortal/Global.asax b/samples/ProviderPortal/Global.asax new file mode 100644 index 0000000..a67f1b1 --- /dev/null +++ b/samples/ProviderPortal/Global.asax @@ -0,0 +1 @@ +<%@ Application Codebehind="Global.asax.cs" Inherits="OpenIdProviderWebForms.Global" Language="C#" %> diff --git a/samples/ProviderPortal/Global.asax.cs b/samples/ProviderPortal/Global.asax.cs new file mode 100644 index 0000000..89d9268 --- /dev/null +++ b/samples/ProviderPortal/Global.asax.cs @@ -0,0 +1,82 @@ +//----------------------------------------------------------------------- +// <copyright file="Global.asax.cs" company="Andrew Arnott"> +// Copyright (c) Andrew Arnott. All rights reserved. +// </copyright> +//----------------------------------------------------------------------- + +namespace OpenIdProviderWebForms { + using System; + using System.Collections.Specialized; + using System.IO; + using System.Text; + using System.Web; + using OpenIdProviderWebForms.Code; + + public class Global : System.Web.HttpApplication { + public static log4net.ILog Logger = log4net.LogManager.GetLogger(typeof(Global)); + + internal static StringBuilder LogMessages = new StringBuilder(); + + public static string ToString(NameValueCollection collection) { + using (StringWriter sw = new StringWriter()) { + foreach (string key in collection.Keys) { + if (key.StartsWith("__")) { + continue; // skip + } + sw.WriteLine("{0} = '{1}'", key, collection[key]); + } + return sw.ToString(); + } + } + + protected void Application_Start(object sender, EventArgs e) { + log4net.Config.XmlConfigurator.Configure(); + Logger.Info("Sample starting..."); + } + + protected void Application_End(object sender, EventArgs e) { + Logger.Info("Sample shutting down..."); + + // this would be automatic, but in partial trust scenarios it is not. + log4net.LogManager.Shutdown(); + } + + protected void Application_BeginRequest(object sender, EventArgs e) { + /* + * The URLRewriter was taken from http://www.codeproject.com/aspnet/URLRewriter.asp and modified slightly. + * It will read the config section called 'urlrewrites' from web.config and process each rule + * The rules are set of url transformations defined using regular expressions with support for substitutions (the ability to extract regex-matched portions of a string). + * There is only one rule currenty defined. It rewrites urls like: user/john ->user.aspx?username=john + */ + //// System.Diagnostics.Debugger.Launch(); + Logger.DebugFormat("Processing {0} on {1} ", this.Request.HttpMethod, this.stripQueryString(this.Request.Url)); + if (Request.QueryString.Count > 0) { + Logger.DebugFormat("Querystring follows: \n{0}", ToString(Request.QueryString)); + } + if (Request.Form.Count > 0) { + Logger.DebugFormat("Posted form follows: \n{0}", ToString(Request.Form)); + } + + URLRewriter.Process(); + } + + protected void Application_AuthenticateRequest(object sender, EventArgs e) { + Logger.DebugFormat("User {0} authenticated.", HttpContext.Current.User != null ? "IS" : "is NOT"); + } + + protected void Application_EndRequest(object sender, EventArgs e) { + } + + protected void Application_Error(object sender, EventArgs e) { + Logger.ErrorFormat( + "An unhandled exception was raised. Details follow: {0}", + HttpContext.Current.Server.GetLastError()); + } + + private string stripQueryString(Uri uri) { + UriBuilder builder = new UriBuilder(uri); + builder.Query = null; + return builder.ToString(); + } + } +}
\ No newline at end of file diff --git a/samples/ProviderPortal/OpenIdProviderWebForms.csproj b/samples/ProviderPortal/OpenIdProviderWebForms.csproj new file mode 100644 index 0000000..179f4f8 --- /dev/null +++ b/samples/ProviderPortal/OpenIdProviderWebForms.csproj @@ -0,0 +1,191 @@ +<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <PropertyGroup> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <ProductVersion>9.0.30729</ProductVersion> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{2A59DE0A-B76A-4B42-9A33-04D34548353D}</ProjectGuid> + <ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids> + <OutputType>Library</OutputType> + <AppDesignerFolder>Properties</AppDesignerFolder> + <RootNamespace>OpenIdProviderWebForms</RootNamespace> + <AssemblyName>OpenIdProviderWebForms</AssemblyName> + <TargetFrameworkVersion>v3.5</TargetFrameworkVersion> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> + <DebugSymbols>true</DebugSymbols> + <DebugType>full</DebugType> + <Optimize>false</Optimize> + <OutputPath>bin\</OutputPath> + <DefineConstants>DEBUG</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> + <DebugType>pdbonly</DebugType> + <Optimize>true</Optimize> + <OutputPath>bin\</OutputPath> + <DefineConstants>TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + </PropertyGroup> + <ItemGroup> + <Reference Include="log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821, processorArchitecture=MSIL"> + <SpecificVersion>False</SpecificVersion> + <HintPath>..\..\lib\log4net.dll</HintPath> + </Reference> + <Reference Include="System" /> + <Reference Include="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"> + <RequiredTargetFramework>3.5</RequiredTargetFramework> + </Reference> + <Reference Include="System.Data" /> + <Reference Include="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"> + <RequiredTargetFramework>3.5</RequiredTargetFramework> + </Reference> + <Reference Include="System.Drawing" /> + <Reference Include="System.Web" /> + <Reference Include="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"> + <RequiredTargetFramework>3.5</RequiredTargetFramework> + </Reference> + <Reference Include="System.Web.Extensions.Design, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"> + <RequiredTargetFramework>3.5</RequiredTargetFramework> + </Reference> + <Reference Include="System.Xml" /> + <Reference Include="System.Configuration" /> + <Reference Include="System.Web.Services" /> + <Reference Include="System.EnterpriseServices" /> + <Reference Include="System.Web.Mobile" /> + <Reference Include="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"> + <RequiredTargetFramework>3.5</RequiredTargetFramework> + </Reference> + </ItemGroup> + <ItemGroup> + <Content Include="App_Data\Users.xml" /> + <Content Include="op_xrds.aspx" /> + <Content Include="decide.aspx" /> + <Content Include="Default.aspx" /> + <Content Include="login.aspx" /> + <Content Include="ProfileFields.ascx" /> + <Content Include="server.aspx" /> + <Content Include="user.aspx" /> + <Content Include="Global.asax" /> + <Content Include="Web.config" /> + <Content Include="user_xrds.aspx" /> + </ItemGroup> + <ItemGroup> + <Compile Include="Code\CustomStore.cs" /> + <Compile Include="Code\CustomStoreDataSet.Designer.cs"> + <DependentUpon>CustomStoreDataSet.xsd</DependentUpon> + <AutoGen>True</AutoGen> + <DesignTime>True</DesignTime> + </Compile> + <Compile Include="Code\ReadOnlyXmlMembershipProvider.cs" /> + <Compile Include="Code\TracePageAppender.cs" /> + <Compile Include="Code\URLRewriter.cs" /> + <Compile Include="Code\Util.cs" /> + <Compile Include="decide.aspx.cs"> + <DependentUpon>decide.aspx</DependentUpon> + <SubType>ASPXCodeBehind</SubType> + </Compile> + <Compile Include="decide.aspx.designer.cs"> + <DependentUpon>decide.aspx</DependentUpon> + </Compile> + <Compile Include="Global.asax.cs"> + <DependentUpon>Global.asax</DependentUpon> + </Compile> + <Compile Include="login.aspx.cs"> + <DependentUpon>login.aspx</DependentUpon> + <SubType>ASPXCodeBehind</SubType> + </Compile> + <Compile Include="login.aspx.designer.cs"> + <DependentUpon>login.aspx</DependentUpon> + </Compile> + <Compile Include="ProfileFields.ascx.cs"> + <DependentUpon>ProfileFields.ascx</DependentUpon> + <SubType>ASPXCodeBehind</SubType> + </Compile> + <Compile Include="ProfileFields.ascx.designer.cs"> + <DependentUpon>ProfileFields.ascx</DependentUpon> + </Compile> + <Compile Include="Properties\AssemblyInfo.cs" /> + <Compile Include="Provider.ashx.cs"> + <DependentUpon>Provider.ashx</DependentUpon> + </Compile> + <Compile Include="server.aspx.cs"> + <DependentUpon>server.aspx</DependentUpon> + <SubType>ASPXCodeBehind</SubType> + </Compile> + <Compile Include="server.aspx.designer.cs"> + <DependentUpon>server.aspx</DependentUpon> + </Compile> + <Compile Include="TracePage.aspx.cs"> + <DependentUpon>TracePage.aspx</DependentUpon> + <SubType>ASPXCodeBehind</SubType> + </Compile> + <Compile Include="TracePage.aspx.designer.cs"> + <DependentUpon>TracePage.aspx</DependentUpon> + </Compile> + <Compile Include="user.aspx.cs"> + <DependentUpon>user.aspx</DependentUpon> + <SubType>ASPXCodeBehind</SubType> + </Compile> + <Compile Include="user.aspx.designer.cs"> + <DependentUpon>user.aspx</DependentUpon> + </Compile> + </ItemGroup> + <ItemGroup> + <Content Include="favicon.ico" /> + <Content Include="images\dotnetopenid_tiny.gif" /> + <Content Include="Site.Master" /> + <Content Include="styles.css" /> + <Content Include="TracePage.aspx" /> + </ItemGroup> + <ItemGroup> + <None Include="Code\CustomStoreDataSet.xsc"> + <DependentUpon>CustomStoreDataSet.xsd</DependentUpon> + </None> + <None Include="Code\CustomStoreDataSet.xsd"> + <Generator>MSDataSetGenerator</Generator> + <LastGenOutput>CustomStoreDataSet.Designer.cs</LastGenOutput> + <SubType>Designer</SubType> + </None> + <None Include="Code\CustomStoreDataSet.xss"> + <DependentUpon>CustomStoreDataSet.xsd</DependentUpon> + </None> + <Content Include="Provider.ashx" /> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="..\..\src\DotNetOpenAuth\DotNetOpenAuth.csproj"> + <Project>{3191B653-F76D-4C1A-9A5A-347BC3AAAAB7}</Project> + <Name>DotNetOpenAuth</Name> + </ProjectReference> + </ItemGroup> + <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> + <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v9.0\WebApplications\Microsoft.WebApplication.targets" /> + <!-- To modify your build process, add your task inside one of the targets below and uncomment it. + Other similar extension points exist, see Microsoft.Common.targets. + <Target Name="BeforeBuild"> + </Target> + <Target Name="AfterBuild"> + </Target> + --> + <ProjectExtensions> + <VisualStudio> + <FlavorProperties GUID="{349c5851-65df-11da-9384-00065b846f21}"> + <WebProjectProperties> + <UseIIS>False</UseIIS> + <AutoAssignPort>True</AutoAssignPort> + <DevelopmentServerPort>28597</DevelopmentServerPort> + <DevelopmentServerVPath>/</DevelopmentServerVPath> + <IISUrl> + </IISUrl> + <NTLMAuthentication>False</NTLMAuthentication> + <UseCustomServer>False</UseCustomServer> + <CustomServerUrl> + </CustomServerUrl> + <SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile> + </WebProjectProperties> + </FlavorProperties> + </VisualStudio> + </ProjectExtensions> +</Project>
\ No newline at end of file diff --git a/samples/ProviderPortal/ProfileFields.ascx b/samples/ProviderPortal/ProfileFields.ascx new file mode 100644 index 0000000..9f368d5 --- /dev/null +++ b/samples/ProviderPortal/ProfileFields.ascx @@ -0,0 +1,1024 @@ +<%@ Control Language="C#" AutoEventWireup="true" Inherits="OpenIdProviderWebForms.ProfileFields" CodeBehind="ProfileFields.ascx.cs" %> +This consumer has requested the following fields from you<br /> +<table> + <tr> + <td> + + </td> + <td> + <asp:HyperLink ID="privacyLink" runat="server" Text="Privacy Policy" + Target="_blank" /> + </td> + </tr> + <tr runat="server" id="nicknameRow"> + <td> + Nickname + <asp:Label ID="nicknameRequiredLabel" runat="server" Text="*" Visible="False"></asp:Label> + </td> + <td> + <asp:TextBox ID="nicknameTextBox" runat="server"></asp:TextBox> + </td> + </tr> + <tr runat="server" id="emailRow"> + <td> + Email + <asp:Label ID="emailRequiredLabel" runat="server" Text="*" Visible="False"></asp:Label> + </td> + <td> + <asp:TextBox ID="emailTextBox" runat="server"></asp:TextBox> + </td> + </tr> + <tr runat="server" id="fullnameRow"> + <td> + FullName + <asp:Label ID="fullnameRequiredLabel" runat="server" Text="*" Visible="False"></asp:Label> + </td> + <td> + <asp:TextBox ID="fullnameTextBox" runat="server"></asp:TextBox> + </td> + </tr> + <tr runat="server" id="dateOfBirthRow"> + <td> + Date of Birth + <asp:Label ID="dobRequiredLabel" runat="server" Text="*" Visible="False"></asp:Label> + </td> + <td> + <asp:DropDownList ID="dobDayDropdownlist" runat="server"> + <asp:ListItem></asp:ListItem> + <asp:ListItem>1</asp:ListItem> + <asp:ListItem>2</asp:ListItem> + <asp:ListItem>3</asp:ListItem> + <asp:ListItem>4</asp:ListItem> + <asp:ListItem>5</asp:ListItem> + <asp:ListItem>6</asp:ListItem> + <asp:ListItem>7</asp:ListItem> + <asp:ListItem>8</asp:ListItem> + <asp:ListItem>9</asp:ListItem> + <asp:ListItem>10</asp:ListItem> + <asp:ListItem>11</asp:ListItem> + <asp:ListItem>12</asp:ListItem> + <asp:ListItem>13</asp:ListItem> + <asp:ListItem>14</asp:ListItem> + <asp:ListItem>15</asp:ListItem> + <asp:ListItem>16</asp:ListItem> + <asp:ListItem>17</asp:ListItem> + <asp:ListItem>18</asp:ListItem> + <asp:ListItem>19</asp:ListItem> + <asp:ListItem>20</asp:ListItem> + <asp:ListItem>21</asp:ListItem> + <asp:ListItem>22</asp:ListItem> + <asp:ListItem>23</asp:ListItem> + <asp:ListItem>24</asp:ListItem> + <asp:ListItem>25</asp:ListItem> + <asp:ListItem>26</asp:ListItem> + <asp:ListItem>27</asp:ListItem> + <asp:ListItem>28</asp:ListItem> + <asp:ListItem>29</asp:ListItem> + <asp:ListItem>30</asp:ListItem> + <asp:ListItem>31</asp:ListItem> + </asp:DropDownList> + <asp:DropDownList ID="dobMonthDropdownlist" runat="server"> + <asp:ListItem></asp:ListItem> + <asp:ListItem Value="1">January</asp:ListItem> + <asp:ListItem Value="2">February</asp:ListItem> + <asp:ListItem Value="3">March</asp:ListItem> + <asp:ListItem Value="4">April</asp:ListItem> + <asp:ListItem Value="5">May</asp:ListItem> + <asp:ListItem Value="6">June</asp:ListItem> + <asp:ListItem Value="7">July</asp:ListItem> + <asp:ListItem Value="8">August</asp:ListItem> + <asp:ListItem Value="9">September</asp:ListItem> + <asp:ListItem Value="10">October</asp:ListItem> + <asp:ListItem Value="11">November</asp:ListItem> + <asp:ListItem Value="12">December</asp:ListItem> + </asp:DropDownList> + + <asp:DropDownList ID="dobYearDropdownlist" runat="server"> + <asp:ListItem></asp:ListItem> + <asp:ListItem>2009</asp:ListItem> + <asp:ListItem>2008</asp:ListItem> + <asp:ListItem>2007</asp:ListItem> + <asp:ListItem>2006</asp:ListItem> + <asp:ListItem>2005</asp:ListItem> + <asp:ListItem>2004</asp:ListItem> + <asp:ListItem>2003</asp:ListItem> + <asp:ListItem>2002</asp:ListItem> + <asp:ListItem>2001</asp:ListItem> + <asp:ListItem>2000</asp:ListItem> + <asp:ListItem>1999</asp:ListItem> + <asp:ListItem>1998</asp:ListItem> + <asp:ListItem>1997</asp:ListItem> + <asp:ListItem>1996</asp:ListItem> + <asp:ListItem>1995</asp:ListItem> + <asp:ListItem>1994</asp:ListItem> + <asp:ListItem>1993</asp:ListItem> + <asp:ListItem>1992</asp:ListItem> + <asp:ListItem>1991</asp:ListItem> + <asp:ListItem>1990</asp:ListItem> + <asp:ListItem>1989</asp:ListItem> + <asp:ListItem>1988</asp:ListItem> + <asp:ListItem>1987</asp:ListItem> + <asp:ListItem>1986</asp:ListItem> + <asp:ListItem>1985</asp:ListItem> + <asp:ListItem>1984</asp:ListItem> + <asp:ListItem>1983</asp:ListItem> + <asp:ListItem>1982</asp:ListItem> + <asp:ListItem>1981</asp:ListItem> + <asp:ListItem>1980</asp:ListItem> + <asp:ListItem>1979</asp:ListItem> + <asp:ListItem>1978</asp:ListItem> + <asp:ListItem>1977</asp:ListItem> + <asp:ListItem>1976</asp:ListItem> + <asp:ListItem>1975</asp:ListItem> + <asp:ListItem>1974</asp:ListItem> + <asp:ListItem>1973</asp:ListItem> + <asp:ListItem>1972</asp:ListItem> + <asp:ListItem>1971</asp:ListItem> + <asp:ListItem>1970</asp:ListItem> + <asp:ListItem>1969</asp:ListItem> + <asp:ListItem>1968</asp:ListItem> + <asp:ListItem>1967</asp:ListItem> + <asp:ListItem>1966</asp:ListItem> + <asp:ListItem>1965</asp:ListItem> + <asp:ListItem>1964</asp:ListItem> + <asp:ListItem>1963</asp:ListItem> + <asp:ListItem>1962</asp:ListItem> + <asp:ListItem>1961</asp:ListItem> + <asp:ListItem>1960</asp:ListItem> + <asp:ListItem>1959</asp:ListItem> + <asp:ListItem>1958</asp:ListItem> + <asp:ListItem>1957</asp:ListItem> + <asp:ListItem>1956</asp:ListItem> + <asp:ListItem>1955</asp:ListItem> + <asp:ListItem>1954</asp:ListItem> + <asp:ListItem>1953</asp:ListItem> + <asp:ListItem>1952</asp:ListItem> + <asp:ListItem>1951</asp:ListItem> + <asp:ListItem>1950</asp:ListItem> + <asp:ListItem>1949</asp:ListItem> + <asp:ListItem>1948</asp:ListItem> + <asp:ListItem>1947</asp:ListItem> + <asp:ListItem>1946</asp:ListItem> + <asp:ListItem>1945</asp:ListItem> + <asp:ListItem>1944</asp:ListItem> + <asp:ListItem>1943</asp:ListItem> + <asp:ListItem>1942</asp:ListItem> + <asp:ListItem>1941</asp:ListItem> + <asp:ListItem>1940</asp:ListItem> + <asp:ListItem>1939</asp:ListItem> + <asp:ListItem>1938</asp:ListItem> + <asp:ListItem>1937</asp:ListItem> + <asp:ListItem>1936</asp:ListItem> + <asp:ListItem>1935</asp:ListItem> + <asp:ListItem>1934</asp:ListItem> + <asp:ListItem>1933</asp:ListItem> + <asp:ListItem>1932</asp:ListItem> + <asp:ListItem>1931</asp:ListItem> + <asp:ListItem>1930</asp:ListItem> + <asp:ListItem>1929</asp:ListItem> + <asp:ListItem>1928</asp:ListItem> + <asp:ListItem>1927</asp:ListItem> + <asp:ListItem>1926</asp:ListItem> + <asp:ListItem>1925</asp:ListItem> + <asp:ListItem>1924</asp:ListItem> + <asp:ListItem>1923</asp:ListItem> + <asp:ListItem>1922</asp:ListItem> + <asp:ListItem>1921</asp:ListItem> + <asp:ListItem>1920</asp:ListItem> + </asp:DropDownList> + </td> + </tr> + <tr runat="server" id="genderRow"> + <td> + Gender + <asp:Label ID="genderRequiredLabel" runat="server" Text="*" Visible="False"></asp:Label> + </td> + <td> + <asp:DropDownList ID="genderDropdownList" runat="server"> + <asp:ListItem Selected="True"></asp:ListItem> + <asp:ListItem>Male</asp:ListItem> + <asp:ListItem>Female</asp:ListItem> + </asp:DropDownList> + </td> + </tr> + <tr runat="server" id="postcodeRow"> + <td> + Post Code + <asp:Label ID="postcodeRequiredLabel" runat="server" Text="*" Visible="False"></asp:Label> + </td> + <td> + <asp:TextBox ID="postcodeTextBox" runat="server"></asp:TextBox> + </td> + </tr> + <tr runat="server" id="countryRow"> + <td> + Country + <asp:Label ID="countryRequiredLabel" runat="server" Text="*" Visible="False"></asp:Label> + </td> + <td> + <asp:DropDownList ID="countryDropdownList" runat="server"> + <asp:ListItem Value=""> </asp:ListItem> + <asp:ListItem Value="AF">AFGHANISTAN </asp:ListItem> + <asp:ListItem Value="AX">ÅLAND ISLANDS</asp:ListItem> + <asp:ListItem Value="AL">ALBANIA</asp:ListItem> + <asp:ListItem Value="DZ">ALGERIA</asp:ListItem> + <asp:ListItem Value="AS">AMERICAN SAMOA</asp:ListItem> + <asp:ListItem Value="AD">ANDORRA</asp:ListItem> + <asp:ListItem Value="AO">ANGOLA</asp:ListItem> + <asp:ListItem Value="AI">ANGUILLA</asp:ListItem> + <asp:ListItem Value="AQ">ANTARCTICA</asp:ListItem> + <asp:ListItem Value="AG">ANTIGUA AND BARBUDA</asp:ListItem> + <asp:ListItem Value="AR">ARGENTINA</asp:ListItem> + <asp:ListItem Value="AM">ARMENIA</asp:ListItem> + <asp:ListItem Value="AW">ARUBA</asp:ListItem> + <asp:ListItem Value="AU">AUSTRALIA</asp:ListItem> + <asp:ListItem Value="AT">AUSTRIA</asp:ListItem> + <asp:ListItem Value="AZ">AZERBAIJAN</asp:ListItem> + <asp:ListItem Value="BS">BAHAMAS</asp:ListItem> + <asp:ListItem Value="BH">BAHRAIN</asp:ListItem> + <asp:ListItem Value="BD">BANGLADESH</asp:ListItem> + <asp:ListItem Value="BB">BARBADOS</asp:ListItem> + <asp:ListItem Value="BY">BELARUS</asp:ListItem> + <asp:ListItem Value="BE">BELGIUM</asp:ListItem> + <asp:ListItem Value="BZ">BELIZE</asp:ListItem> + <asp:ListItem Value="BJ">BENIN</asp:ListItem> + <asp:ListItem Value="BM">BERMUDA</asp:ListItem> + <asp:ListItem Value="BT">BHUTAN</asp:ListItem> + <asp:ListItem Value="BO">BOLIVIA</asp:ListItem> + <asp:ListItem Value="BA">BOSNIA AND HERZEGOVINA</asp:ListItem> + <asp:ListItem Value="BW">BOTSWANA</asp:ListItem> + <asp:ListItem Value="BV">BOUVET ISLAND</asp:ListItem> + <asp:ListItem Value="BR">BRAZIL</asp:ListItem> + <asp:ListItem Value="IO">BRITISH INDIAN OCEAN TERRITORY</asp:ListItem> + <asp:ListItem Value="BN">BRUNEI DARUSSALAM</asp:ListItem> + <asp:ListItem Value="BG">BULGARIA</asp:ListItem> + <asp:ListItem Value="BF">BURKINA FASO</asp:ListItem> + <asp:ListItem Value="BI">BURUNDI</asp:ListItem> + <asp:ListItem Value="KH">CAMBODIA</asp:ListItem> + <asp:ListItem Value="CM">CAMEROON</asp:ListItem> + <asp:ListItem Value="CA">CANADA</asp:ListItem> + <asp:ListItem Value="CV">CAPE VERDE</asp:ListItem> + <asp:ListItem Value="KY">CAYMAN ISLANDS</asp:ListItem> + <asp:ListItem Value="CF">CENTRAL AFRICAN REPUBLIC</asp:ListItem> + <asp:ListItem Value="TD">CHAD</asp:ListItem> + <asp:ListItem Value="CL">CHILE</asp:ListItem> + <asp:ListItem Value="CN">CHINA</asp:ListItem> + <asp:ListItem Value="CX">CHRISTMAS ISLAND</asp:ListItem> + <asp:ListItem Value="CC">COCOS (KEELING) ISLANDS</asp:ListItem> + <asp:ListItem Value="CO">COLOMBIA</asp:ListItem> + <asp:ListItem Value="KM">COMOROS</asp:ListItem> + <asp:ListItem Value="CG">CONGO</asp:ListItem> + <asp:ListItem Value="CD">CONGO, THE DEMOCRATIC REPUBLIC OF THE</asp:ListItem> + <asp:ListItem Value="CK">COOK ISLANDS</asp:ListItem> + <asp:ListItem Value="CR">COSTA RICA</asp:ListItem> + <asp:ListItem Value="CI">CÔTE D'IVOIRE</asp:ListItem> + <asp:ListItem Value="HR">CROATIA</asp:ListItem> + <asp:ListItem Value="CU">CUBA</asp:ListItem> + <asp:ListItem Value="CY">CYPRUS</asp:ListItem> + <asp:ListItem Value="CZ">CZECH REPUBLIC</asp:ListItem> + <asp:ListItem Value="DK">DENMARK</asp:ListItem> + <asp:ListItem Value="DJ">DJIBOUTI</asp:ListItem> + <asp:ListItem Value="DM">DOMINICA</asp:ListItem> + <asp:ListItem Value="DO">DOMINICAN REPUBLIC</asp:ListItem> + <asp:ListItem Value="EC">ECUADOR</asp:ListItem> + <asp:ListItem Value="EG">EGYPT</asp:ListItem> + <asp:ListItem Value="SV">EL SALVADOR</asp:ListItem> + <asp:ListItem Value="GQ">EQUATORIAL GUINEA</asp:ListItem> + <asp:ListItem Value="ER">ERITREA</asp:ListItem> + <asp:ListItem Value="EE">ESTONIA</asp:ListItem> + <asp:ListItem Value="ET">ETHIOPIA</asp:ListItem> + <asp:ListItem Value="FK">FALKLAND ISLANDS (MALVINAS)</asp:ListItem> + <asp:ListItem Value="FO">FAROE ISLANDS</asp:ListItem> + <asp:ListItem Value="FJ">FIJI</asp:ListItem> + <asp:ListItem Value="FI">FINLAND</asp:ListItem> + <asp:ListItem Value="FR">FRANCE</asp:ListItem> + <asp:ListItem Value="GF">FRENCH GUIANA</asp:ListItem> + <asp:ListItem Value="PF">FRENCH POLYNESIA</asp:ListItem> + <asp:ListItem Value="TF">FRENCH SOUTHERN TERRITORIES</asp:ListItem> + <asp:ListItem Value="GA">GABON </asp:ListItem> + <asp:ListItem Value="GM">GAMBIA</asp:ListItem> + <asp:ListItem Value="GE">GEORGIA</asp:ListItem> + <asp:ListItem Value="DE">GERMANY</asp:ListItem> + <asp:ListItem Value="GH">GHANA</asp:ListItem> + <asp:ListItem Value="GI">GIBRALTAR</asp:ListItem> + <asp:ListItem Value="GR">GREECE</asp:ListItem> + <asp:ListItem Value="GL">GREENLAND</asp:ListItem> + <asp:ListItem Value="GD">GRENADA</asp:ListItem> + <asp:ListItem Value="GP">GUADELOUPE</asp:ListItem> + <asp:ListItem Value="GU">GUAM </asp:ListItem> + <asp:ListItem Value="GT">GUATEMALA</asp:ListItem> + <asp:ListItem Value="GG">GUERNSEY</asp:ListItem> + <asp:ListItem Value="GN">GUINEA</asp:ListItem> + <asp:ListItem Value="GW">GUINEA-BISSAU</asp:ListItem> + <asp:ListItem Value="GY">GUYANA</asp:ListItem> + <asp:ListItem Value="HT">HAITI</asp:ListItem> + <asp:ListItem Value="HM">HEARD ISLAND AND MCDONALD ISLANDS</asp:ListItem> + <asp:ListItem Value="VA">HOLY SEE (VATICAN CITY STATE)</asp:ListItem> + <asp:ListItem Value="HN">HONDURAS</asp:ListItem> + <asp:ListItem Value="HK">HONG KONG</asp:ListItem> + <asp:ListItem Value="HU">HUNGARY</asp:ListItem> + <asp:ListItem Value="IS">ICELAND</asp:ListItem> + <asp:ListItem Value="IN">INDIA</asp:ListItem> + <asp:ListItem Value="ID">INDONESIA</asp:ListItem> + <asp:ListItem Value="IR">IRAN, ISLAMIC REPUBLIC OF</asp:ListItem> + <asp:ListItem Value="IQ">IRAQ</asp:ListItem> + <asp:ListItem Value="IE">IRELAND</asp:ListItem> + <asp:ListItem Value="IM">ISLE OF MAN</asp:ListItem> + <asp:ListItem Value="IL">ISRAEL</asp:ListItem> + <asp:ListItem Value="IT">ITALY</asp:ListItem> + <asp:ListItem Value="JM">JAMAICA</asp:ListItem> + <asp:ListItem Value="JP">JAPAN</asp:ListItem> + <asp:ListItem Value="JE">JERSEY</asp:ListItem> + <asp:ListItem Value="JO">JORDAN</asp:ListItem> + <asp:ListItem Value="KZ">KAZAKHSTAN</asp:ListItem> + <asp:ListItem Value="KE">KENYA</asp:ListItem> + <asp:ListItem Value="KI">KIRIBATI</asp:ListItem> + <asp:ListItem Value="KP">KOREA, DEMOCRATIC PEOPLE'S REPUBLIC OF</asp:ListItem> + <asp:ListItem Value="KR">KOREA, REPUBLIC OF</asp:ListItem> + <asp:ListItem Value="KW">KUWAIT</asp:ListItem> + <asp:ListItem Value="KG">KYRGYZSTAN</asp:ListItem> + <asp:ListItem Value="LA">LAO PEOPLE'S DEMOCRATIC REPUBLIC </asp:ListItem> + <asp:ListItem Value="LV">LATVIA</asp:ListItem> + <asp:ListItem Value="LB">LEBANON</asp:ListItem> + <asp:ListItem Value="LS">LESOTHO</asp:ListItem> + <asp:ListItem Value="LR">LIBERIA</asp:ListItem> + <asp:ListItem Value="LY">LIBYAN ARAB JAMAHIRIYA</asp:ListItem> + <asp:ListItem Value="LI">LIECHTENSTEIN</asp:ListItem> + <asp:ListItem Value="LT">LITHUANIA</asp:ListItem> + <asp:ListItem Value="LU">LUXEMBOURG</asp:ListItem> + <asp:ListItem Value="MO">MACAO</asp:ListItem> + <asp:ListItem Value="MK">MACEDONIA, THE FORMER YUGOSLAV REPUBLIC OF</asp:ListItem> + <asp:ListItem Value="MG">MADAGASCAR</asp:ListItem> + <asp:ListItem Value="MW">MALAWI</asp:ListItem> + <asp:ListItem Value="MY">MALAYSIA</asp:ListItem> + <asp:ListItem Value="MV">MALDIVES</asp:ListItem> + <asp:ListItem Value="ML">MALI</asp:ListItem> + <asp:ListItem Value="MT">MALTA</asp:ListItem> + <asp:ListItem Value="MH">MARSHALL ISLANDS</asp:ListItem> + <asp:ListItem Value="MQ">MARTINIQUE</asp:ListItem> + <asp:ListItem Value="MR">MAURITANIA</asp:ListItem> + <asp:ListItem Value="MU">MAURITIUS</asp:ListItem> + <asp:ListItem Value="YT">MAYOTTE</asp:ListItem> + <asp:ListItem Value="MX">MEXICO</asp:ListItem> + <asp:ListItem Value="FM">MICRONESIA, FEDERATED STATES OF</asp:ListItem> + <asp:ListItem Value="MD">MOLDOVA, REPUBLIC OF</asp:ListItem> + <asp:ListItem Value="MC">MONACO</asp:ListItem> + <asp:ListItem Value="MN">MONGOLIA</asp:ListItem> + <asp:ListItem Value="ME">MONTENEGRO</asp:ListItem> + <asp:ListItem Value="MS">MONTSERRAT</asp:ListItem> + <asp:ListItem Value="MA">MOROCCO</asp:ListItem> + <asp:ListItem Value="MZ">MOZAMBIQUE</asp:ListItem> + <asp:ListItem Value="MM">MYANMAR</asp:ListItem> + <asp:ListItem Value="NA">NAMIBIA</asp:ListItem> + <asp:ListItem Value="NR">NAURU</asp:ListItem> + <asp:ListItem Value="NP">NEPAL</asp:ListItem> + <asp:ListItem Value="NL">NETHERLANDS</asp:ListItem> + <asp:ListItem Value="AN">NETHERLANDS ANTILLES</asp:ListItem> + <asp:ListItem Value="NC">NEW CALEDONIA</asp:ListItem> + <asp:ListItem Value="NZ">NEW ZEALAND</asp:ListItem> + <asp:ListItem Value="NI">NICARAGUA</asp:ListItem> + <asp:ListItem Value="NE">NIGER</asp:ListItem> + <asp:ListItem Value="NG">NIGERIA</asp:ListItem> + <asp:ListItem Value="NU">NIUE</asp:ListItem> + <asp:ListItem Value="NF">NORFOLK ISLAND</asp:ListItem> + <asp:ListItem Value="MP">NORTHERN MARIANA ISLANDS</asp:ListItem> + <asp:ListItem Value="NO">NORWAY</asp:ListItem> + <asp:ListItem Value="OM">OMAN</asp:ListItem> + <asp:ListItem Value="PK">PAKISTAN</asp:ListItem> + <asp:ListItem Value="PW">PALAU</asp:ListItem> + <asp:ListItem Value="PS">PALESTINIAN TERRITORY, OCCUPIED</asp:ListItem> + <asp:ListItem Value="PA">PANAMA</asp:ListItem> + <asp:ListItem Value="PG">PAPUA NEW GUINEA</asp:ListItem> + <asp:ListItem Value="PY">PARAGUAY</asp:ListItem> + <asp:ListItem Value="PE">PERU</asp:ListItem> + <asp:ListItem Value="PH">PHILIPPINES</asp:ListItem> + <asp:ListItem Value="PN">PITCAIRN</asp:ListItem> + <asp:ListItem Value="PL">POLAND</asp:ListItem> + <asp:ListItem Value="PT">PORTUGAL</asp:ListItem> + <asp:ListItem Value="PR">PUERTO RICO</asp:ListItem> + <asp:ListItem Value="QA">QATAR</asp:ListItem> + <asp:ListItem Value="RE">RÉUNION</asp:ListItem> + <asp:ListItem Value="RO">ROMANIA</asp:ListItem> + <asp:ListItem Value="RU">RUSSIAN FEDERATION</asp:ListItem> + <asp:ListItem Value="RW">RWANDA</asp:ListItem> + <asp:ListItem Value="SH">SAINT HELENA </asp:ListItem> + <asp:ListItem Value="KN">SAINT KITTS AND NEVIS</asp:ListItem> + <asp:ListItem Value="LC">SAINT LUCIA</asp:ListItem> + <asp:ListItem Value="PM">SAINT PIERRE AND MIQUELON</asp:ListItem> + <asp:ListItem Value="VC">SAINT VINCENT AND THE GRENADINES</asp:ListItem> + <asp:ListItem Value="WS">SAMOA</asp:ListItem> + <asp:ListItem Value="SM">SAN MARINO</asp:ListItem> + <asp:ListItem Value="ST">SAO TOME AND PRINCIPE</asp:ListItem> + <asp:ListItem Value="SA">SAUDI ARABIA</asp:ListItem> + <asp:ListItem Value="SN">SENEGAL</asp:ListItem> + <asp:ListItem Value="RS">SERBIA</asp:ListItem> + <asp:ListItem Value="SC">SEYCHELLES</asp:ListItem> + <asp:ListItem Value="SL">SIERRA LEONE</asp:ListItem> + <asp:ListItem Value="SG">SINGAPORE</asp:ListItem> + <asp:ListItem Value="SK">SLOVAKIA</asp:ListItem> + <asp:ListItem Value="SI">SLOVENIA</asp:ListItem> + <asp:ListItem Value="SB">SOLOMON ISLANDS</asp:ListItem> + <asp:ListItem Value="SO">SOMALIA</asp:ListItem> + <asp:ListItem Value="ZA">SOUTH AFRICA</asp:ListItem> + <asp:ListItem Value="GS">SOUTH GEORGIA AND THE SOUTH SANDWICH ISLANDS</asp:ListItem> + <asp:ListItem Value="ES">SPAIN</asp:ListItem> + <asp:ListItem Value="LK">SRI LANKA</asp:ListItem> + <asp:ListItem Value="SD">SUDAN</asp:ListItem> + <asp:ListItem Value="SR">SURINAME</asp:ListItem> + <asp:ListItem Value="SJ">SVALBARD AND JAN MAYEN</asp:ListItem> + <asp:ListItem Value="SZ">SWAZILAND</asp:ListItem> + <asp:ListItem Value="SE">SWEDEN</asp:ListItem> + <asp:ListItem Value="CH">SWITZERLAND</asp:ListItem> + <asp:ListItem Value="SY">SYRIAN ARAB REPUBLIC</asp:ListItem> + <asp:ListItem Value="TW">TAIWAN, PROVINCE OF CHINA</asp:ListItem> + <asp:ListItem Value="TJ">TAJIKISTAN</asp:ListItem> + <asp:ListItem Value="TZ">TANZANIA, UNITED REPUBLIC OF</asp:ListItem> + <asp:ListItem Value="TH">THAILAND</asp:ListItem> + <asp:ListItem Value="TL">TIMOR-LESTE</asp:ListItem> + <asp:ListItem Value="TG">TOGO</asp:ListItem> + <asp:ListItem Value="TK">TOKELAU</asp:ListItem> + <asp:ListItem Value="TO">TONGA</asp:ListItem> + <asp:ListItem Value="TT">TRINIDAD AND TOBAGO</asp:ListItem> + <asp:ListItem Value="TN">TUNISIA</asp:ListItem> + <asp:ListItem Value="TR">TURKEY</asp:ListItem> + <asp:ListItem Value="TM">TURKMENISTAN</asp:ListItem> + <asp:ListItem Value="TC">TURKS AND CAICOS ISLANDS</asp:ListItem> + <asp:ListItem Value="TV">TUVALU</asp:ListItem> + <asp:ListItem Value="UG">UGANDA</asp:ListItem> + <asp:ListItem Value="UA">UKRAINE</asp:ListItem> + <asp:ListItem Value="AE">UNITED ARAB EMIRATES</asp:ListItem> + <asp:ListItem Value="GB">UNITED KINGDOM</asp:ListItem> + <asp:ListItem Value="US">UNITED STATES</asp:ListItem> + <asp:ListItem Value="UM">UNITED STATES MINOR OUTLYING ISLANDS</asp:ListItem> + <asp:ListItem Value="UY">URUGUAY</asp:ListItem> + <asp:ListItem Value="UZ">UZBEKISTAN</asp:ListItem> + <asp:ListItem Value="VU">VANUATU</asp:ListItem> + <asp:ListItem Value="VE">VENEZUELA</asp:ListItem> + <asp:ListItem Value="VN">VIET NAM</asp:ListItem> + <asp:ListItem Value="VG">VIRGIN ISLANDS, BRITISH</asp:ListItem> + <asp:ListItem Value="VI">VIRGIN ISLANDS, U.S.</asp:ListItem> + <asp:ListItem Value="WF">WALLIS AND FUTUNA</asp:ListItem> + <asp:ListItem Value="EH">WESTERN SAHARA</asp:ListItem> + <asp:ListItem Value="YE">YEMEN</asp:ListItem> + <asp:ListItem Value="ZM">ZAMBIA</asp:ListItem> + <asp:ListItem Value="ZW">ZIMBABWE</asp:ListItem> + </asp:DropDownList> + </td> + </tr> + <tr runat="server" id="languageRow"> + <td> + Language + <asp:Label ID="languageRequiredLabel" runat="server" Text="*" Visible="False"></asp:Label> + </td> + <td> + <asp:DropDownList ID="languageDropdownList" runat="server"> + <asp:ListItem Value=""></asp:ListItem> + <asp:ListItem Value="EN">English</asp:ListItem> + <asp:ListItem Value="AB">Abkhazian</asp:ListItem> + <asp:ListItem Value="AA">Afar</asp:ListItem> + <asp:ListItem Value="AF">Afrikaans</asp:ListItem> + <asp:ListItem Value="SQ">Albanian</asp:ListItem> + <asp:ListItem Value="AM">Amharic</asp:ListItem> + <asp:ListItem Value="AR">Arabic</asp:ListItem> + <asp:ListItem Value="HY">Armenian</asp:ListItem> + <asp:ListItem Value="AS">Assamese</asp:ListItem> + <asp:ListItem Value="AY">Aymara</asp:ListItem> + <asp:ListItem Value="AZ">Azerbaijani</asp:ListItem> + <asp:ListItem Value="BA">Bashkir</asp:ListItem> + <asp:ListItem Value="EU">Basque</asp:ListItem> + <asp:ListItem Value="BN">Bengali</asp:ListItem> + <asp:ListItem Value="DZ">Bhutani</asp:ListItem> + <asp:ListItem Value="BH">Bihari</asp:ListItem> + <asp:ListItem Value="BI">Bislama</asp:ListItem> + <asp:ListItem Value="BR">Breton</asp:ListItem> + <asp:ListItem Value="BG">Bulgarian</asp:ListItem> + <asp:ListItem Value="MY">Burmese</asp:ListItem> + <asp:ListItem Value="BE">Byelorussian</asp:ListItem> + <asp:ListItem Value="KM">Cambodian</asp:ListItem> + <asp:ListItem Value="CA">Catalan</asp:ListItem> + <asp:ListItem Value="ZH">Chinese</asp:ListItem> + <asp:ListItem Value="CO">Corsican</asp:ListItem> + <asp:ListItem Value="HR">Croatian</asp:ListItem> + <asp:ListItem Value="CS">Czech</asp:ListItem> + <asp:ListItem Value="DA">Danish</asp:ListItem> + <asp:ListItem Value="NL">Dutch</asp:ListItem> + <asp:ListItem Value="EO">Esperanto</asp:ListItem> + <asp:ListItem Value="ET">Estonian</asp:ListItem> + <asp:ListItem Value="FO">Faeroese</asp:ListItem> + <asp:ListItem Value="FJ">Fiji</asp:ListItem> + <asp:ListItem Value="FI">Finnish</asp:ListItem> + <asp:ListItem Value="FR">French</asp:ListItem> + <asp:ListItem Value="FY">Frisian</asp:ListItem> + <asp:ListItem Value="GD">Gaelic</asp:ListItem> + <asp:ListItem Value="GL">Galician</asp:ListItem> + <asp:ListItem Value="KA">Georgian</asp:ListItem> + <asp:ListItem Value="DE">German</asp:ListItem> + <asp:ListItem Value="EL">Greek</asp:ListItem> + <asp:ListItem Value="KL">Greenlandic</asp:ListItem> + <asp:ListItem Value="GN">Guarani</asp:ListItem> + <asp:ListItem Value="GU">Gujarati</asp:ListItem> + <asp:ListItem Value="HA">Hausa</asp:ListItem> + <asp:ListItem Value="IW">Hebrew</asp:ListItem> + <asp:ListItem Value="HI">Hindi</asp:ListItem> + <asp:ListItem Value="HU">Hungarian</asp:ListItem> + <asp:ListItem Value="IS">Icelandic</asp:ListItem> + <asp:ListItem Value="IN">Indonesian</asp:ListItem> + <asp:ListItem Value="IA">Interlingua</asp:ListItem> + <asp:ListItem Value="IE">Interlingue</asp:ListItem> + <asp:ListItem Value="IK">Inupiak</asp:ListItem> + <asp:ListItem Value="GA">Irish</asp:ListItem> + <asp:ListItem Value="IT">Italian</asp:ListItem> + <asp:ListItem Value="JA">Japanese</asp:ListItem> + <asp:ListItem Value="JW">Javanese</asp:ListItem> + <asp:ListItem Value="KN">Kannada</asp:ListItem> + <asp:ListItem Value="KS">Kashmiri</asp:ListItem> + <asp:ListItem Value="KK">Kazakh</asp:ListItem> + <asp:ListItem Value="RW">Kinyarwanda</asp:ListItem> + <asp:ListItem Value="KY">Kirghiz</asp:ListItem> + <asp:ListItem Value="RN">Kirundi</asp:ListItem> + <asp:ListItem Value="KO">Korean</asp:ListItem> + <asp:ListItem Value="KU">Kurdish</asp:ListItem> + <asp:ListItem Value="LO">Laothian</asp:ListItem> + <asp:ListItem Value="LA">Latin</asp:ListItem> + <asp:ListItem Value="LV">Latvian</asp:ListItem> + <asp:ListItem Value="LN">Lingala</asp:ListItem> + <asp:ListItem Value="LT">Lithuanian</asp:ListItem> + <asp:ListItem Value="MK">Macedonian</asp:ListItem> + <asp:ListItem Value="MG">Malagasy</asp:ListItem> + <asp:ListItem Value="MS">Malay</asp:ListItem> + <asp:ListItem Value="ML">Malayalam</asp:ListItem> + <asp:ListItem Value="MT">Maltese</asp:ListItem> + <asp:ListItem Value="MI">Maori</asp:ListItem> + <asp:ListItem Value="MR">Marathi</asp:ListItem> + <asp:ListItem Value="MO">Moldavian</asp:ListItem> + <asp:ListItem Value="MN">Mongolian</asp:ListItem> + <asp:ListItem Value="NA">Nauru</asp:ListItem> + <asp:ListItem Value="NE">Nepali</asp:ListItem> + <asp:ListItem Value="NO">Norwegian</asp:ListItem> + <asp:ListItem Value="OC">Occitan</asp:ListItem> + <asp:ListItem Value="OR">Oriya</asp:ListItem> + <asp:ListItem Value="OM">Oromo</asp:ListItem> + <asp:ListItem Value="PS">Pashto</asp:ListItem> + <asp:ListItem Value="FA">Persian</asp:ListItem> + <asp:ListItem Value="PL">Polish</asp:ListItem> + <asp:ListItem Value="PT">Portuguese</asp:ListItem> + <asp:ListItem Value="PA">Punjabi</asp:ListItem> + <asp:ListItem Value="QU">Quechua</asp:ListItem> + <asp:ListItem Value="RM">Rhaeto-Romance</asp:ListItem> + <asp:ListItem Value="RO">Romanian</asp:ListItem> + <asp:ListItem Value="RU">Russian</asp:ListItem> + <asp:ListItem Value="SM">Samoan</asp:ListItem> + <asp:ListItem Value="SG">Sangro</asp:ListItem> + <asp:ListItem Value="SA">Sanskrit</asp:ListItem> + <asp:ListItem Value="SR">Serbian</asp:ListItem> + <asp:ListItem Value="SH">Serbo-Croatian</asp:ListItem> + <asp:ListItem Value="ST">Sesotho</asp:ListItem> + <asp:ListItem Value="TN">Setswana</asp:ListItem> + <asp:ListItem Value="SN">Shona</asp:ListItem> + <asp:ListItem Value="SD">Sindhi</asp:ListItem> + <asp:ListItem Value="SI">Singhalese</asp:ListItem> + <asp:ListItem Value="SS">Siswati</asp:ListItem> + <asp:ListItem Value="SK">Slovak</asp:ListItem> + <asp:ListItem Value="SL">Slovenian</asp:ListItem> + <asp:ListItem Value="SO">Somali</asp:ListItem> + <asp:ListItem Value="ES">Spanish</asp:ListItem> + <asp:ListItem Value="SU">Sudanese</asp:ListItem> + <asp:ListItem Value="SW">Swahili</asp:ListItem> + <asp:ListItem Value="SV">Swedish</asp:ListItem> + <asp:ListItem Value="TL">Tagalog</asp:ListItem> + <asp:ListItem Value="TG">Tajik</asp:ListItem> + <asp:ListItem Value="TA">Tamil</asp:ListItem> + <asp:ListItem Value="TT">Tatar</asp:ListItem> + <asp:ListItem Value="TE">Telugu</asp:ListItem> + <asp:ListItem Value="TH">Thai</asp:ListItem> + <asp:ListItem Value="BO">Tibetan</asp:ListItem> + <asp:ListItem Value="TI">Tigrinya</asp:ListItem> + <asp:ListItem Value="TO">Tonga</asp:ListItem> + <asp:ListItem Value="TS">Tsonga</asp:ListItem> + <asp:ListItem Value="TR">Turkish</asp:ListItem> + <asp:ListItem Value="TK">Turkmen</asp:ListItem> + <asp:ListItem Value="TW">Twi</asp:ListItem> + <asp:ListItem Value="UK">Ukrainian</asp:ListItem> + <asp:ListItem Value="UR">Urdu</asp:ListItem> + <asp:ListItem Value="UZ">Uzbek</asp:ListItem> + <asp:ListItem Value="VI">Vietnamese</asp:ListItem> + <asp:ListItem Value="VO">Volapuk</asp:ListItem> + <asp:ListItem Value="CY">Welsh</asp:ListItem> + <asp:ListItem Value="WO">Wolof</asp:ListItem> + <asp:ListItem Value="XH">Xhosa</asp:ListItem> + <asp:ListItem Value="JI">Yiddish</asp:ListItem> + <asp:ListItem Value="YO">Yoruba</asp:ListItem> + <asp:ListItem Value="ZU">Zulu</asp:ListItem> + </asp:DropDownList> + </td> + </tr> + <tr runat="server" id="timezoneRow"> + <td> + Timezone + <asp:Label ID="timezoneRequiredLabel" runat="server" Text="*" Visible="False"></asp:Label> + </td> + <td> + <asp:DropDownList runat="server" ID="timezoneDropdownList"> + <asp:ListItem Value=""></asp:ListItem> + <asp:ListItem Value="Europe/London">Europe/London</asp:ListItem> + <asp:ListItem Value="Africa/Abidjan">Africa/Abidjan</asp:ListItem> + <asp:ListItem Value="Africa/Accra">Africa/Accra</asp:ListItem> + <asp:ListItem Value="Africa/Addis_Ababa">Africa/Addis_Ababa</asp:ListItem> + <asp:ListItem Value="Africa/Algiers">Africa/Algiers</asp:ListItem> + <asp:ListItem Value="Africa/Asmera">Africa/Asmera</asp:ListItem> + <asp:ListItem Value="Africa/Bamako">Africa/Bamako</asp:ListItem> + <asp:ListItem Value="Africa/Bangui">Africa/Bangui</asp:ListItem> + <asp:ListItem Value="Africa/Banjul">Africa/Banjul</asp:ListItem> + <asp:ListItem Value="Africa/Bissau">Africa/Bissau</asp:ListItem> + <asp:ListItem Value="Africa/Blantyre">Africa/Blantyre</asp:ListItem> + <asp:ListItem Value="Africa/Brazzaville">Africa/Brazzaville</asp:ListItem> + <asp:ListItem Value="Africa/Bujumbura">Africa/Bujumbura</asp:ListItem> + <asp:ListItem Value="Africa/Cairo">Africa/Cairo</asp:ListItem> + <asp:ListItem Value="Africa/Casablanca">Africa/Casablanca</asp:ListItem> + <asp:ListItem Value="Africa/Ceuta">Africa/Ceuta</asp:ListItem> + <asp:ListItem Value="Africa/Conakry">Africa/Conakry</asp:ListItem> + <asp:ListItem Value="Africa/Dakar">Africa/Dakar</asp:ListItem> + <asp:ListItem Value="Africa/Dar_es_Salaam">Africa/Dar_es_Salaam</asp:ListItem> + <asp:ListItem Value="Africa/Djibouti">Africa/Djibouti</asp:ListItem> + <asp:ListItem Value="Africa/Douala">Africa/Douala</asp:ListItem> + <asp:ListItem Value="Africa/El_Aaiun">Africa/El_Aaiun</asp:ListItem> + <asp:ListItem Value="Africa/Freetown">Africa/Freetown</asp:ListItem> + <asp:ListItem Value="Africa/Gaborone">Africa/Gaborone</asp:ListItem> + <asp:ListItem Value="Africa/Harare">Africa/Harare</asp:ListItem> + <asp:ListItem Value="Africa/Johannesburg">Africa/Johannesburg</asp:ListItem> + <asp:ListItem Value="Africa/Kampala">Africa/Kampala</asp:ListItem> + <asp:ListItem Value="Africa/Khartoum">Africa/Khartoum</asp:ListItem> + <asp:ListItem Value="Africa/Kigali">Africa/Kigali</asp:ListItem> + <asp:ListItem Value="Africa/Kinshasa">Africa/Kinshasa</asp:ListItem> + <asp:ListItem Value="Africa/Lagos">Africa/Lagos</asp:ListItem> + <asp:ListItem Value="Africa/Libreville">Africa/Libreville</asp:ListItem> + <asp:ListItem Value="Africa/Lome">Africa/Lome</asp:ListItem> + <asp:ListItem Value="Africa/Luanda">Africa/Luanda</asp:ListItem> + <asp:ListItem Value="Africa/Lubumbashi">Africa/Lubumbashi</asp:ListItem> + <asp:ListItem Value="Africa/Lusaka">Africa/Lusaka</asp:ListItem> + <asp:ListItem Value="Africa/Malabo">Africa/Malabo</asp:ListItem> + <asp:ListItem Value="Africa/Maputo">Africa/Maputo</asp:ListItem> + <asp:ListItem Value="Africa/Maseru">Africa/Maseru</asp:ListItem> + <asp:ListItem Value="Africa/Mbabane">Africa/Mbabane</asp:ListItem> + <asp:ListItem Value="Africa/Mogadishu">Africa/Mogadishu</asp:ListItem> + <asp:ListItem Value="Africa/Monrovia">Africa/Monrovia</asp:ListItem> + <asp:ListItem Value="Africa/Nairobi">Africa/Nairobi</asp:ListItem> + <asp:ListItem Value="Africa/Ndjamena">Africa/Ndjamena</asp:ListItem> + <asp:ListItem Value="Africa/Niamey">Africa/Niamey</asp:ListItem> + <asp:ListItem Value="Africa/Nouakchott">Africa/Nouakchott</asp:ListItem> + <asp:ListItem Value="Africa/Ouagadougou">Africa/Ouagadougou</asp:ListItem> + <asp:ListItem Value="Africa/Porto">Africa/Porto</asp:ListItem> + <asp:ListItem Value="Africa/Sao_Tome">Africa/Sao_Tome</asp:ListItem> + <asp:ListItem Value="Africa/Tripoli">Africa/Tripoli</asp:ListItem> + <asp:ListItem Value="Africa/Tunis">Africa/Tunis</asp:ListItem> + <asp:ListItem Value="Africa/Windhoek">Africa/Windhoek</asp:ListItem> + <asp:ListItem Value="America/Adak">America/Adak</asp:ListItem> + <asp:ListItem Value="America/Anchorage">America/Anchorage</asp:ListItem> + <asp:ListItem Value="America/Anguilla">America/Anguilla</asp:ListItem> + <asp:ListItem Value="America/Antigua">America/Antigua</asp:ListItem> + <asp:ListItem Value="America/Araguaina">America/Araguaina</asp:ListItem> + <asp:ListItem Value="America/Argentina/Buenos_Aires">America/Argentina/Buenos_Aires</asp:ListItem> + <asp:ListItem Value="America/Argentina/Catamarca">America/Argentina/Catamarca</asp:ListItem> + <asp:ListItem Value="America/Argentina/Cordoba">America/Argentina/Cordoba</asp:ListItem> + <asp:ListItem Value="America/Argentina/Jujuy">America/Argentina/Jujuy</asp:ListItem> + <asp:ListItem Value="America/Argentina/La_Rioja">America/Argentina/La_Rioja</asp:ListItem> + <asp:ListItem Value="America/Argentina/Mendoza">America/Argentina/Mendoza</asp:ListItem> + <asp:ListItem Value="America/Argentina/Rio_Gallegos">America/Argentina/Rio_Gallegos</asp:ListItem> + <asp:ListItem Value="America/Argentina/San_Juan">America/Argentina/San_Juan</asp:ListItem> + <asp:ListItem Value="America/Argentina/Tucuman">America/Argentina/Tucuman</asp:ListItem> + <asp:ListItem Value="America/Argentina/Ushuaia">America/Argentina/Ushuaia</asp:ListItem> + <asp:ListItem Value="America/Aruba">America/Aruba</asp:ListItem> + <asp:ListItem Value="America/Asuncion">America/Asuncion</asp:ListItem> + <asp:ListItem Value="America/Bahia">America/Bahia</asp:ListItem> + <asp:ListItem Value="America/Barbados">America/Barbados</asp:ListItem> + <asp:ListItem Value="America/Belem">America/Belem</asp:ListItem> + <asp:ListItem Value="America/Belize">America/Belize</asp:ListItem> + <asp:ListItem Value="America/Boa_Vista">America/Boa_Vista</asp:ListItem> + <asp:ListItem Value="America/Bogota">America/Bogota</asp:ListItem> + <asp:ListItem Value="America/Boise">America/Boise</asp:ListItem> + <asp:ListItem Value="America/Cambridge_Bay">America/Cambridge_Bay</asp:ListItem> + <asp:ListItem Value="America/Campo_Grande">America/Campo_Grande</asp:ListItem> + <asp:ListItem Value="America/Cancun">America/Cancun</asp:ListItem> + <asp:ListItem Value="America/Caracas">America/Caracas</asp:ListItem> + <asp:ListItem Value="America/Cayenne">America/Cayenne</asp:ListItem> + <asp:ListItem Value="America/Cayman">America/Cayman</asp:ListItem> + <asp:ListItem Value="America/Chicago">America/Chicago</asp:ListItem> + <asp:ListItem Value="America/Chihuahua">America/Chihuahua</asp:ListItem> + <asp:ListItem Value="America/Coral_Harbour">America/Coral_Harbour</asp:ListItem> + <asp:ListItem Value="America/Costa_Rica">America/Costa_Rica</asp:ListItem> + <asp:ListItem Value="America/Cuiaba">America/Cuiaba</asp:ListItem> + <asp:ListItem Value="America/Curacao">America/Curacao</asp:ListItem> + <asp:ListItem Value="America/Danmarkshavn">America/Danmarkshavn</asp:ListItem> + <asp:ListItem Value="America/Dawson">America/Dawson</asp:ListItem> + <asp:ListItem Value="America/Dawson_Creek">America/Dawson_Creek</asp:ListItem> + <asp:ListItem Value="America/Denver">America/Denver</asp:ListItem> + <asp:ListItem Value="America/Detroit">America/Detroit</asp:ListItem> + <asp:ListItem Value="America/Dominica">America/Dominica</asp:ListItem> + <asp:ListItem Value="America/Edmonton">America/Edmonton</asp:ListItem> + <asp:ListItem Value="America/Eirunepe">America/Eirunepe</asp:ListItem> + <asp:ListItem Value="America/El_Salvador">America/El_Salvador</asp:ListItem> + <asp:ListItem Value="America/Fortaleza">America/Fortaleza</asp:ListItem> + <asp:ListItem Value="America/Glace_Bay">America/Glace_Bay</asp:ListItem> + <asp:ListItem Value="America/Godthab">America/Godthab</asp:ListItem> + <asp:ListItem Value="America/Goose_Bay">America/Goose_Bay</asp:ListItem> + <asp:ListItem Value="America/Grand_Turk">America/Grand_Turk</asp:ListItem> + <asp:ListItem Value="America/Grenada">America/Grenada</asp:ListItem> + <asp:ListItem Value="America/Guadeloupe">America/Guadeloupe</asp:ListItem> + <asp:ListItem Value="America/Guatemala">America/Guatemala</asp:ListItem> + <asp:ListItem Value="America/Guayaquil">America/Guayaquil</asp:ListItem> + <asp:ListItem Value="America/Guyana">America/Guyana</asp:ListItem> + <asp:ListItem Value="America/Halifax">America/Halifax</asp:ListItem> + <asp:ListItem Value="America/Havana">America/Havana</asp:ListItem> + <asp:ListItem Value="America/Hermosillo">America/Hermosillo</asp:ListItem> + <asp:ListItem Value="America/Indiana/Indianapolis">America/Indiana/Indianapolis</asp:ListItem> + <asp:ListItem Value="America/Indiana/Knox">America/Indiana/Knox</asp:ListItem> + <asp:ListItem Value="America/Indiana/Marengo">America/Indiana/Marengo</asp:ListItem> + <asp:ListItem Value="America/Indiana/Petersburg">America/Indiana/Petersburg</asp:ListItem> + <asp:ListItem Value="America/Indiana/Vevay">America/Indiana/Vevay</asp:ListItem> + <asp:ListItem Value="America/Indiana/Vincennes">America/Indiana/Vincennes</asp:ListItem> + <asp:ListItem Value="America/Inuvik">America/Inuvik</asp:ListItem> + <asp:ListItem Value="America/Iqaluit">America/Iqaluit</asp:ListItem> + <asp:ListItem Value="America/Jamaica">America/Jamaica</asp:ListItem> + <asp:ListItem Value="America/Juneau">America/Juneau</asp:ListItem> + <asp:ListItem Value="America/Kentucky/Louisville">America/Kentucky/Louisville</asp:ListItem> + <asp:ListItem Value="America/Kentucky/Monticello">America/Kentucky/Monticello</asp:ListItem> + <asp:ListItem Value="America/La_Paz">America/La_Paz</asp:ListItem> + <asp:ListItem Value="America/Lima">America/Lima</asp:ListItem> + <asp:ListItem Value="America/Los_Angeles">America/Los_Angeles</asp:ListItem> + <asp:ListItem Value="America/Maceio">America/Maceio</asp:ListItem> + <asp:ListItem Value="America/Managua">America/Managua</asp:ListItem> + <asp:ListItem Value="America/Manaus">America/Manaus</asp:ListItem> + <asp:ListItem Value="America/Martinique">America/Martinique</asp:ListItem> + <asp:ListItem Value="America/Mazatlan">America/Mazatlan</asp:ListItem> + <asp:ListItem Value="America/Menominee">America/Menominee</asp:ListItem> + <asp:ListItem Value="America/Merida">America/Merida</asp:ListItem> + <asp:ListItem Value="America/Mexico_City">America/Mexico_City</asp:ListItem> + <asp:ListItem Value="America/Miquelon">America/Miquelon</asp:ListItem> + <asp:ListItem Value="America/Moncton">America/Moncton</asp:ListItem> + <asp:ListItem Value="America/Monterrey">America/Monterrey</asp:ListItem> + <asp:ListItem Value="America/Montevideo">America/Montevideo</asp:ListItem> + <asp:ListItem Value="America/Montreal">America/Montreal</asp:ListItem> + <asp:ListItem Value="America/Montserrat">America/Montserrat</asp:ListItem> + <asp:ListItem Value="America/Nassau">America/Nassau</asp:ListItem> + <asp:ListItem Value="America/New_York">America/New_York</asp:ListItem> + <asp:ListItem Value="America/Nipigon">America/Nipigon</asp:ListItem> + <asp:ListItem Value="America/Nome">America/Nome</asp:ListItem> + <asp:ListItem Value="America/Noronha">America/Noronha</asp:ListItem> + <asp:ListItem Value="America/North_Dakota/Center">America/North_Dakota/Center</asp:ListItem> + <asp:ListItem Value="America/Panama">America/Panama</asp:ListItem> + <asp:ListItem Value="America/Pangnirtung">America/Pangnirtung</asp:ListItem> + <asp:ListItem Value="America/Paramaribo">America/Paramaribo</asp:ListItem> + <asp:ListItem Value="America/Phoenix">America/Phoenix</asp:ListItem> + <asp:ListItem Value="America/Port">America/Port</asp:ListItem> + <asp:ListItem Value="America/Port_of_Spain">America/Port_of_Spain</asp:ListItem> + <asp:ListItem Value="America/Porto_Velho">America/Porto_Velho</asp:ListItem> + <asp:ListItem Value="America/Puerto_Rico">America/Puerto_Rico</asp:ListItem> + <asp:ListItem Value="America/Rainy_River">America/Rainy_River</asp:ListItem> + <asp:ListItem Value="America/Rankin_Inlet">America/Rankin_Inlet</asp:ListItem> + <asp:ListItem Value="America/Recife">America/Recife</asp:ListItem> + <asp:ListItem Value="America/Regina">America/Regina</asp:ListItem> + <asp:ListItem Value="America/Rio_Branco">America/Rio_Branco</asp:ListItem> + <asp:ListItem Value="America/Santiago">America/Santiago</asp:ListItem> + <asp:ListItem Value="America/Santo_Domingo">America/Santo_Domingo</asp:ListItem> + <asp:ListItem Value="America/Sao_Paulo">America/Sao_Paulo</asp:ListItem> + <asp:ListItem Value="America/Scoresbysund">America/Scoresbysund</asp:ListItem> + <asp:ListItem Value="America/Shiprock">America/Shiprock</asp:ListItem> + <asp:ListItem Value="America/St_Johns">America/St_Johns</asp:ListItem> + <asp:ListItem Value="America/St_Kitts">America/St_Kitts</asp:ListItem> + <asp:ListItem Value="America/St_Lucia">America/St_Lucia</asp:ListItem> + <asp:ListItem Value="America/St_Thomas">America/St_Thomas</asp:ListItem> + <asp:ListItem Value="America/St_Vincent">America/St_Vincent</asp:ListItem> + <asp:ListItem Value="America/Swift_Current">America/Swift_Current</asp:ListItem> + <asp:ListItem Value="America/Tegucigalpa">America/Tegucigalpa</asp:ListItem> + <asp:ListItem Value="America/Thule">America/Thule</asp:ListItem> + <asp:ListItem Value="America/Thunder_Bay">America/Thunder_Bay</asp:ListItem> + <asp:ListItem Value="America/Tijuana">America/Tijuana</asp:ListItem> + <asp:ListItem Value="America/Toronto">America/Toronto</asp:ListItem> + <asp:ListItem Value="America/Tortola">America/Tortola</asp:ListItem> + <asp:ListItem Value="America/Vancouver">America/Vancouver</asp:ListItem> + <asp:ListItem Value="America/Whitehorse">America/Whitehorse</asp:ListItem> + <asp:ListItem Value="America/Winnipeg">America/Winnipeg</asp:ListItem> + <asp:ListItem Value="America/Yakutat">America/Yakutat</asp:ListItem> + <asp:ListItem Value="America/Yellowknife">America/Yellowknife</asp:ListItem> + <asp:ListItem Value="Antarctica/Casey">Antarctica/Casey</asp:ListItem> + <asp:ListItem Value="Antarctica/Davis">Antarctica/Davis</asp:ListItem> + <asp:ListItem Value="Antarctica/DumontDUrville">Antarctica/DumontDUrville</asp:ListItem> + <asp:ListItem Value="Antarctica/Mawson">Antarctica/Mawson</asp:ListItem> + <asp:ListItem Value="Antarctica/McMurdo">Antarctica/McMurdo</asp:ListItem> + <asp:ListItem Value="Antarctica/Palmer">Antarctica/Palmer</asp:ListItem> + <asp:ListItem Value="Antarctica/Rothera">Antarctica/Rothera</asp:ListItem> + <asp:ListItem Value="Antarctica/South_Pole">Antarctica/South_Pole</asp:ListItem> + <asp:ListItem Value="Antarctica/Syowa">Antarctica/Syowa</asp:ListItem> + <asp:ListItem Value="Antarctica/Vostok">Antarctica/Vostok</asp:ListItem> + <asp:ListItem Value="Arctic/Longyearbyen">Arctic/Longyearbyen</asp:ListItem> + <asp:ListItem Value="Asia/Aden">Asia/Aden</asp:ListItem> + <asp:ListItem Value="Asia/Almaty">Asia/Almaty</asp:ListItem> + <asp:ListItem Value="Asia/Amman">Asia/Amman</asp:ListItem> + <asp:ListItem Value="Asia/Anadyr">Asia/Anadyr</asp:ListItem> + <asp:ListItem Value="Asia/Aqtau">Asia/Aqtau</asp:ListItem> + <asp:ListItem Value="Asia/Aqtobe">Asia/Aqtobe</asp:ListItem> + <asp:ListItem Value="Asia/Ashgabat">Asia/Ashgabat</asp:ListItem> + <asp:ListItem Value="Asia/Baghdad">Asia/Baghdad</asp:ListItem> + <asp:ListItem Value="Asia/Bahrain">Asia/Bahrain</asp:ListItem> + <asp:ListItem Value="Asia/Baku">Asia/Baku</asp:ListItem> + <asp:ListItem Value="Asia/Bangkok">Asia/Bangkok</asp:ListItem> + <asp:ListItem Value="Asia/Beirut">Asia/Beirut</asp:ListItem> + <asp:ListItem Value="Asia/Bishkek">Asia/Bishkek</asp:ListItem> + <asp:ListItem Value="Asia/Brunei">Asia/Brunei</asp:ListItem> + <asp:ListItem Value="Asia/Calcutta">Asia/Calcutta</asp:ListItem> + <asp:ListItem Value="Asia/Choibalsan">Asia/Choibalsan</asp:ListItem> + <asp:ListItem Value="Asia/Chongqing">Asia/Chongqing</asp:ListItem> + <asp:ListItem Value="Asia/Colombo">Asia/Colombo</asp:ListItem> + <asp:ListItem Value="Asia/Damascus">Asia/Damascus</asp:ListItem> + <asp:ListItem Value="Asia/Dhaka">Asia/Dhaka</asp:ListItem> + <asp:ListItem Value="Asia/Dili">Asia/Dili</asp:ListItem> + <asp:ListItem Value="Asia/Dubai">Asia/Dubai</asp:ListItem> + <asp:ListItem Value="Asia/Dushanbe">Asia/Dushanbe</asp:ListItem> + <asp:ListItem Value="Asia/Gaza">Asia/Gaza</asp:ListItem> + <asp:ListItem Value="Asia/Harbin">Asia/Harbin</asp:ListItem> + <asp:ListItem Value="Asia/Hong_Kong">Asia/Hong_Kong</asp:ListItem> + <asp:ListItem Value="Asia/Hovd">Asia/Hovd</asp:ListItem> + <asp:ListItem Value="Asia/Irkutsk">Asia/Irkutsk</asp:ListItem> + <asp:ListItem Value="Asia/Jakarta">Asia/Jakarta</asp:ListItem> + <asp:ListItem Value="Asia/Jayapura">Asia/Jayapura</asp:ListItem> + <asp:ListItem Value="Asia/Jerusalem">Asia/Jerusalem</asp:ListItem> + <asp:ListItem Value="Asia/Kabul">Asia/Kabul</asp:ListItem> + <asp:ListItem Value="Asia/Kamchatka">Asia/Kamchatka</asp:ListItem> + <asp:ListItem Value="Asia/Karachi">Asia/Karachi</asp:ListItem> + <asp:ListItem Value="Asia/Kashgar">Asia/Kashgar</asp:ListItem> + <asp:ListItem Value="Asia/Katmandu">Asia/Katmandu</asp:ListItem> + <asp:ListItem Value="Asia/Krasnoyarsk">Asia/Krasnoyarsk</asp:ListItem> + <asp:ListItem Value="Asia/Kuala_Lumpur">Asia/Kuala_Lumpur</asp:ListItem> + <asp:ListItem Value="Asia/Kuching">Asia/Kuching</asp:ListItem> + <asp:ListItem Value="Asia/Kuwait">Asia/Kuwait</asp:ListItem> + <asp:ListItem Value="Asia/Macau">Asia/Macau</asp:ListItem> + <asp:ListItem Value="Asia/Magadan">Asia/Magadan</asp:ListItem> + <asp:ListItem Value="Asia/Makassar">Asia/Makassar</asp:ListItem> + <asp:ListItem Value="Asia/Manila">Asia/Manila</asp:ListItem> + <asp:ListItem Value="Asia/Muscat">Asia/Muscat</asp:ListItem> + <asp:ListItem Value="Asia/Nicosia">Asia/Nicosia</asp:ListItem> + <asp:ListItem Value="Asia/Novosibirsk">Asia/Novosibirsk</asp:ListItem> + <asp:ListItem Value="Asia/Omsk">Asia/Omsk</asp:ListItem> + <asp:ListItem Value="Asia/Oral">Asia/Oral</asp:ListItem> + <asp:ListItem Value="Asia/Phnom_Penh">Asia/Phnom_Penh</asp:ListItem> + <asp:ListItem Value="Asia/Pontianak">Asia/Pontianak</asp:ListItem> + <asp:ListItem Value="Asia/Pyongyang">Asia/Pyongyang</asp:ListItem> + <asp:ListItem Value="Asia/Qatar">Asia/Qatar</asp:ListItem> + <asp:ListItem Value="Asia/Qyzylorda">Asia/Qyzylorda</asp:ListItem> + <asp:ListItem Value="Asia/Rangoon">Asia/Rangoon</asp:ListItem> + <asp:ListItem Value="Asia/Riyadh">Asia/Riyadh</asp:ListItem> + <asp:ListItem Value="Asia/Saigon">Asia/Saigon</asp:ListItem> + <asp:ListItem Value="Asia/Sakhalin">Asia/Sakhalin</asp:ListItem> + <asp:ListItem Value="Asia/Samarkand">Asia/Samarkand</asp:ListItem> + <asp:ListItem Value="Asia/Seoul">Asia/Seoul</asp:ListItem> + <asp:ListItem Value="Asia/Shanghai">Asia/Shanghai</asp:ListItem> + <asp:ListItem Value="Asia/Singapore">Asia/Singapore</asp:ListItem> + <asp:ListItem Value="Asia/Taipei">Asia/Taipei</asp:ListItem> + <asp:ListItem Value="Asia/Tashkent">Asia/Tashkent</asp:ListItem> + <asp:ListItem Value="Asia/Tbilisi">Asia/Tbilisi</asp:ListItem> + <asp:ListItem Value="Asia/Tehran">Asia/Tehran</asp:ListItem> + <asp:ListItem Value="Asia/Thimphu">Asia/Thimphu</asp:ListItem> + <asp:ListItem Value="Asia/Tokyo">Asia/Tokyo</asp:ListItem> + <asp:ListItem Value="Asia/Ulaanbaatar">Asia/Ulaanbaatar</asp:ListItem> + <asp:ListItem Value="Asia/Urumqi">Asia/Urumqi</asp:ListItem> + <asp:ListItem Value="Asia/Vientiane">Asia/Vientiane</asp:ListItem> + <asp:ListItem Value="Asia/Vladivostok">Asia/Vladivostok</asp:ListItem> + <asp:ListItem Value="Asia/Yakutsk">Asia/Yakutsk</asp:ListItem> + <asp:ListItem Value="Asia/Yekaterinburg">Asia/Yekaterinburg</asp:ListItem> + <asp:ListItem Value="Asia/Yerevan">Asia/Yerevan</asp:ListItem> + <asp:ListItem Value="Atlantic/Azores">Atlantic/Azores</asp:ListItem> + <asp:ListItem Value="Atlantic/Bermuda">Atlantic/Bermuda</asp:ListItem> + <asp:ListItem Value="Atlantic/Canary">Atlantic/Canary</asp:ListItem> + <asp:ListItem Value="Atlantic/Cape_Verde">Atlantic/Cape_Verde</asp:ListItem> + <asp:ListItem Value="Atlantic/Faeroe">Atlantic/Faeroe</asp:ListItem> + <asp:ListItem Value="Atlantic/Jan_Mayen">Atlantic/Jan_Mayen</asp:ListItem> + <asp:ListItem Value="Atlantic/Madeira">Atlantic/Madeira</asp:ListItem> + <asp:ListItem Value="Atlantic/Reykjavik">Atlantic/Reykjavik</asp:ListItem> + <asp:ListItem Value="Atlantic/South_Georgia">Atlantic/South_Georgia</asp:ListItem> + <asp:ListItem Value="Atlantic/St_Helena">Atlantic/St_Helena</asp:ListItem> + <asp:ListItem Value="Atlantic/Stanley">Atlantic/Stanley</asp:ListItem> + <asp:ListItem Value="Australia/Adelaide">Australia/Adelaide</asp:ListItem> + <asp:ListItem Value="Australia/Brisbane">Australia/Brisbane</asp:ListItem> + <asp:ListItem Value="Australia/Broken_Hill">Australia/Broken_Hill</asp:ListItem> + <asp:ListItem Value="Australia/Currie">Australia/Currie</asp:ListItem> + <asp:ListItem Value="Australia/Darwin">Australia/Darwin</asp:ListItem> + <asp:ListItem Value="Australia/Hobart">Australia/Hobart</asp:ListItem> + <asp:ListItem Value="Australia/Lindeman">Australia/Lindeman</asp:ListItem> + <asp:ListItem Value="Australia/Lord_Howe">Australia/Lord_Howe</asp:ListItem> + <asp:ListItem Value="Australia/Melbourne">Australia/Melbourne</asp:ListItem> + <asp:ListItem Value="Australia/Perth">Australia/Perth</asp:ListItem> + <asp:ListItem Value="Australia/Sydney">Australia/Sydney</asp:ListItem> + <asp:ListItem Value="Europe/Amsterdam">Europe/Amsterdam</asp:ListItem> + <asp:ListItem Value="Europe/Andorra">Europe/Andorra</asp:ListItem> + <asp:ListItem Value="Europe/Athens">Europe/Athens</asp:ListItem> + <asp:ListItem Value="Europe/Belgrade">Europe/Belgrade</asp:ListItem> + <asp:ListItem Value="Europe/Berlin">Europe/Berlin</asp:ListItem> + <asp:ListItem Value="Europe/Bratislava">Europe/Bratislava</asp:ListItem> + <asp:ListItem Value="Europe/Brussels">Europe/Brussels</asp:ListItem> + <asp:ListItem Value="Europe/Bucharest">Europe/Bucharest</asp:ListItem> + <asp:ListItem Value="Europe/Budapest">Europe/Budapest</asp:ListItem> + <asp:ListItem Value="Europe/Chisinau">Europe/Chisinau</asp:ListItem> + <asp:ListItem Value="Europe/Copenhagen">Europe/Copenhagen</asp:ListItem> + <asp:ListItem Value="Europe/Dublin">Europe/Dublin</asp:ListItem> + <asp:ListItem Value="Europe/Gibraltar">Europe/Gibraltar</asp:ListItem> + <asp:ListItem Value="Europe/Helsinki">Europe/Helsinki</asp:ListItem> + <asp:ListItem Value="Europe/Istanbul">Europe/Istanbul</asp:ListItem> + <asp:ListItem Value="Europe/Kaliningrad">Europe/Kaliningrad</asp:ListItem> + <asp:ListItem Value="Europe/Kiev">Europe/Kiev</asp:ListItem> + <asp:ListItem Value="Europe/Lisbon">Europe/Lisbon</asp:ListItem> + <asp:ListItem Value="Europe/Ljubljana">Europe/Ljubljana</asp:ListItem> + <asp:ListItem Value="Europe/Luxembourg">Europe/Luxembourg</asp:ListItem> + <asp:ListItem Value="Europe/Madrid">Europe/Madrid</asp:ListItem> + <asp:ListItem Value="Europe/Malta">Europe/Malta</asp:ListItem> + <asp:ListItem Value="Europe/Mariehamn">Europe/Mariehamn</asp:ListItem> + <asp:ListItem Value="Europe/Minsk">Europe/Minsk</asp:ListItem> + <asp:ListItem Value="Europe/Monaco">Europe/Monaco</asp:ListItem> + <asp:ListItem Value="Europe/Moscow">Europe/Moscow</asp:ListItem> + <asp:ListItem Value="Europe/Oslo">Europe/Oslo</asp:ListItem> + <asp:ListItem Value="Europe/Paris">Europe/Paris</asp:ListItem> + <asp:ListItem Value="Europe/Prague">Europe/Prague</asp:ListItem> + <asp:ListItem Value="Europe/Riga">Europe/Riga</asp:ListItem> + <asp:ListItem Value="Europe/Rome">Europe/Rome</asp:ListItem> + <asp:ListItem Value="Europe/Samara">Europe/Samara</asp:ListItem> + <asp:ListItem Value="Europe/San_Marino">Europe/San_Marino</asp:ListItem> + <asp:ListItem Value="Europe/Sarajevo">Europe/Sarajevo</asp:ListItem> + <asp:ListItem Value="Europe/Simferopol">Europe/Simferopol</asp:ListItem> + <asp:ListItem Value="Europe/Skopje">Europe/Skopje</asp:ListItem> + <asp:ListItem Value="Europe/Sofia">Europe/Sofia</asp:ListItem> + <asp:ListItem Value="Europe/Stockholm">Europe/Stockholm</asp:ListItem> + <asp:ListItem Value="Europe/Tallinn">Europe/Tallinn</asp:ListItem> + <asp:ListItem Value="Europe/Tirane">Europe/Tirane</asp:ListItem> + <asp:ListItem Value="Europe/Uzhgorod">Europe/Uzhgorod</asp:ListItem> + <asp:ListItem Value="Europe/Vaduz">Europe/Vaduz</asp:ListItem> + <asp:ListItem Value="Europe/Vatican">Europe/Vatican</asp:ListItem> + <asp:ListItem Value="Europe/Vienna">Europe/Vienna</asp:ListItem> + <asp:ListItem Value="Europe/Vilnius">Europe/Vilnius</asp:ListItem> + <asp:ListItem Value="Europe/Warsaw">Europe/Warsaw</asp:ListItem> + <asp:ListItem Value="Europe/Zagreb">Europe/Zagreb</asp:ListItem> + <asp:ListItem Value="Europe/Zaporozhye">Europe/Zaporozhye</asp:ListItem> + <asp:ListItem Value="Europe/Zurich">Europe/Zurich</asp:ListItem> + <asp:ListItem Value="Indian/Antananarivo">Indian/Antananarivo</asp:ListItem> + <asp:ListItem Value="Indian/Chagos">Indian/Chagos</asp:ListItem> + <asp:ListItem Value="Indian/Christmas">Indian/Christmas</asp:ListItem> + <asp:ListItem Value="Indian/Cocos">Indian/Cocos</asp:ListItem> + <asp:ListItem Value="Indian/Comoro">Indian/Comoro</asp:ListItem> + <asp:ListItem Value="Indian/Kerguelen">Indian/Kerguelen</asp:ListItem> + <asp:ListItem Value="Indian/Mahe">Indian/Mahe</asp:ListItem> + <asp:ListItem Value="Indian/Maldives">Indian/Maldives</asp:ListItem> + <asp:ListItem Value="Indian/Mauritius">Indian/Mauritius</asp:ListItem> + <asp:ListItem Value="Indian/Mayotte">Indian/Mayotte</asp:ListItem> + <asp:ListItem Value="Indian/Reunion">Indian/Reunion</asp:ListItem> + <asp:ListItem Value="Pacific/Apia">Pacific/Apia</asp:ListItem> + <asp:ListItem Value="Pacific/Auckland">Pacific/Auckland</asp:ListItem> + <asp:ListItem Value="Pacific/Chatham">Pacific/Chatham</asp:ListItem> + <asp:ListItem Value="Pacific/Easter">Pacific/Easter</asp:ListItem> + <asp:ListItem Value="Pacific/Efate">Pacific/Efate</asp:ListItem> + <asp:ListItem Value="Pacific/Enderbury">Pacific/Enderbury</asp:ListItem> + <asp:ListItem Value="Pacific/Fakaofo">Pacific/Fakaofo</asp:ListItem> + <asp:ListItem Value="Pacific/Fiji">Pacific/Fiji</asp:ListItem> + <asp:ListItem Value="Pacific/Funafuti">Pacific/Funafuti</asp:ListItem> + <asp:ListItem Value="Pacific/Galapagos">Pacific/Galapagos</asp:ListItem> + <asp:ListItem Value="Pacific/Gambier">Pacific/Gambier</asp:ListItem> + <asp:ListItem Value="Pacific/Guadalcanal">Pacific/Guadalcanal</asp:ListItem> + <asp:ListItem Value="Pacific/Guam">Pacific/Guam</asp:ListItem> + <asp:ListItem Value="Pacific/Honolulu">Pacific/Honolulu</asp:ListItem> + <asp:ListItem Value="Pacific/Johnston">Pacific/Johnston</asp:ListItem> + <asp:ListItem Value="Pacific/Kiritimati">Pacific/Kiritimati</asp:ListItem> + <asp:ListItem Value="Pacific/Kosrae">Pacific/Kosrae</asp:ListItem> + <asp:ListItem Value="Pacific/Kwajalein">Pacific/Kwajalein</asp:ListItem> + <asp:ListItem Value="Pacific/Majuro">Pacific/Majuro</asp:ListItem> + <asp:ListItem Value="Pacific/Marquesas">Pacific/Marquesas</asp:ListItem> + <asp:ListItem Value="Pacific/Midway">Pacific/Midway</asp:ListItem> + <asp:ListItem Value="Pacific/Nauru">Pacific/Nauru</asp:ListItem> + <asp:ListItem Value="Pacific/Niue">Pacific/Niue</asp:ListItem> + <asp:ListItem Value="Pacific/Norfolk">Pacific/Norfolk</asp:ListItem> + <asp:ListItem Value="Pacific/Noumea">Pacific/Noumea</asp:ListItem> + <asp:ListItem Value="Pacific/Pago_Pago">Pacific/Pago_Pago</asp:ListItem> + <asp:ListItem Value="Pacific/Palau">Pacific/Palau</asp:ListItem> + <asp:ListItem Value="Pacific/Pitcairn">Pacific/Pitcairn</asp:ListItem> + <asp:ListItem Value="Pacific/Ponape">Pacific/Ponape</asp:ListItem> + <asp:ListItem Value="Pacific/Port_Moresby">Pacific/Port_Moresby</asp:ListItem> + <asp:ListItem Value="Pacific/Rarotonga">Pacific/Rarotonga</asp:ListItem> + <asp:ListItem Value="Pacific/Saipan">Pacific/Saipan</asp:ListItem> + <asp:ListItem Value="Pacific/Tahiti">Pacific/Tahiti</asp:ListItem> + <asp:ListItem Value="Pacific/Tarawa">Pacific/Tarawa</asp:ListItem> + <asp:ListItem Value="Pacific/Tongatapu">Pacific/Tongatapu</asp:ListItem> + <asp:ListItem Value="Pacific/Truk">Pacific/Truk</asp:ListItem> + <asp:ListItem Value="Pacific/Wake">Pacific/Wake</asp:ListItem> + <asp:ListItem Value="Pacific/Wallis">Pacific/Wallis</asp:ListItem> + </asp:DropDownList> + + </td> + </tr> + <tr> + <td> + </td> + <td> + </td> + </tr> + <tr> + <td colspan="2"> + Note: Fields marked with a * are required by the consumer + </td> + </tr> +</table> diff --git a/samples/ProviderPortal/ProfileFields.ascx.cs b/samples/ProviderPortal/ProfileFields.ascx.cs new file mode 100644 index 0000000..893830f --- /dev/null +++ b/samples/ProviderPortal/ProfileFields.ascx.cs @@ -0,0 +1,137 @@ +namespace OpenIdProviderWebForms { + using System; + using DotNetOpenAuth.OpenId.Extensions; + using DotNetOpenAuth.OpenId.Extensions.SimpleRegistration; + + /// <summary> + /// Handles the collection of the simple registration fields. + /// Only mandatory or optional fields are displayed. Mandatory fields have a '*' next to them. + /// No validation occurs here. + /// </summary> + public partial class ProfileFields : System.Web.UI.UserControl { + public bool DoesAnyFieldHaveAValue { + get { + return !((this.DateOfBirth == null) + && string.IsNullOrEmpty(this.countryDropdownList.SelectedValue) + && string.IsNullOrEmpty(this.emailTextBox.Text) + && string.IsNullOrEmpty(this.fullnameTextBox.Text) + && (this.Gender == null) + && string.IsNullOrEmpty(this.languageDropdownList.SelectedValue) + && string.IsNullOrEmpty(this.nicknameTextBox.Text) + && string.IsNullOrEmpty(this.postcodeTextBox.Text) + && string.IsNullOrEmpty(this.timezoneDropdownList.SelectedValue)); + } + } + + public DateTime? DateOfBirth { + get { + try { + int day = Convert.ToInt32(this.dobDayDropdownlist.SelectedValue); + int month = Convert.ToInt32(this.dobMonthDropdownlist.SelectedValue); + int year = Convert.ToInt32(this.dobYearDropdownlist.SelectedValue); + DateTime newDate = new DateTime(year, month, day); + return newDate; + } catch (Exception) { + return null; + } + } + + set { + if (value.HasValue) { + this.dobDayDropdownlist.SelectedValue = value.Value.Day.ToString(); + this.dobMonthDropdownlist.SelectedValue = value.Value.Month.ToString(); + this.dobYearDropdownlist.SelectedValue = value.Value.Year.ToString(); + } else { + this.dobDayDropdownlist.SelectedValue = string.Empty; + this.dobMonthDropdownlist.SelectedValue = string.Empty; + this.dobYearDropdownlist.SelectedValue = string.Empty; + } + } + } + + public Gender? Gender { + get { + if (this.genderDropdownList.SelectedValue == "Male") { + return DotNetOpenAuth.OpenId.Extensions.SimpleRegistration.Gender.Male; + } + if (this.genderDropdownList.SelectedValue == "Female") { + return DotNetOpenAuth.OpenId.Extensions.SimpleRegistration.Gender.Female; + } + return null; + } + + set { + if (value.HasValue) { + this.genderDropdownList.SelectedValue = value.Value.ToString(); + } else { + this.genderDropdownList.SelectedIndex = -1; + } + } + } + + public void SetRequiredFieldsFromRequest(ClaimsRequest requestFields) { + if (requestFields.PolicyUrl != null) { + this.privacyLink.NavigateUrl = requestFields.PolicyUrl.AbsoluteUri; + } else { + this.privacyLink.Visible = false; + } + + this.dobRequiredLabel.Visible = (requestFields.BirthDate == DemandLevel.Require); + this.countryRequiredLabel.Visible = (requestFields.Country == DemandLevel.Require); + this.emailRequiredLabel.Visible = (requestFields.Email == DemandLevel.Require); + this.fullnameRequiredLabel.Visible = (requestFields.FullName == DemandLevel.Require); + this.genderRequiredLabel.Visible = (requestFields.Gender == DemandLevel.Require); + this.languageRequiredLabel.Visible = (requestFields.Language == DemandLevel.Require); + this.nicknameRequiredLabel.Visible = (requestFields.Nickname == DemandLevel.Require); + this.postcodeRequiredLabel.Visible = (requestFields.PostalCode == DemandLevel.Require); + this.timezoneRequiredLabel.Visible = (requestFields.TimeZone == DemandLevel.Require); + + this.dateOfBirthRow.Visible = !(requestFields.BirthDate == DemandLevel.NoRequest); + this.countryRow.Visible = !(requestFields.Country == DemandLevel.NoRequest); + this.emailRow.Visible = !(requestFields.Email == DemandLevel.NoRequest); + this.fullnameRow.Visible = !(requestFields.FullName == DemandLevel.NoRequest); + this.genderRow.Visible = !(requestFields.Gender == DemandLevel.NoRequest); + this.languageRow.Visible = !(requestFields.Language == DemandLevel.NoRequest); + this.nicknameRow.Visible = !(requestFields.Nickname == DemandLevel.NoRequest); + this.postcodeRow.Visible = !(requestFields.PostalCode == DemandLevel.NoRequest); + this.timezoneRow.Visible = !(requestFields.TimeZone == DemandLevel.NoRequest); + } + + public ClaimsResponse GetOpenIdProfileFields(ClaimsRequest request) { + if (request == null) { + throw new ArgumentNullException("request"); + } + + ClaimsResponse fields = request.CreateResponse(); + fields.BirthDate = this.DateOfBirth; + fields.Country = this.countryDropdownList.SelectedValue; + fields.Email = this.emailTextBox.Text; + fields.FullName = this.fullnameTextBox.Text; + fields.Gender = this.Gender; + fields.Language = this.languageDropdownList.SelectedValue; + fields.Nickname = this.nicknameTextBox.Text; + fields.PostalCode = this.postcodeTextBox.Text; + fields.TimeZone = this.timezoneDropdownList.SelectedValue; + return fields; + } + + public void SetOpenIdProfileFields(ClaimsResponse value) { + if (value == null) { + throw new ArgumentNullException("value"); + } + + this.DateOfBirth = value.BirthDate; + this.countryDropdownList.SelectedValue = value.Country; + this.emailTextBox.Text = value.Email; + this.fullnameTextBox.Text = value.FullName; + this.Gender = value.Gender; + this.languageDropdownList.SelectedValue = value.Language; + this.nicknameTextBox.Text = value.Nickname; + this.postcodeTextBox.Text = value.PostalCode; + this.timezoneDropdownList.SelectedValue = value.TimeZone; + } + + protected void Page_Load(object sender, EventArgs e) { + } + } +}
\ No newline at end of file diff --git a/samples/ProviderPortal/ProfileFields.ascx.designer.cs b/samples/ProviderPortal/ProfileFields.ascx.designer.cs new file mode 100644 index 0000000..e546539 --- /dev/null +++ b/samples/ProviderPortal/ProfileFields.ascx.designer.cs @@ -0,0 +1,286 @@ +//------------------------------------------------------------------------------ +// <auto-generated> +// This code was generated by a tool. +// Runtime Version:2.0.50727.3521 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// </auto-generated> +//------------------------------------------------------------------------------ + +namespace OpenIdProviderWebForms { + + + public partial class ProfileFields { + + /// <summary> + /// privacyLink control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.HyperLink privacyLink; + + /// <summary> + /// nicknameRow control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.HtmlControls.HtmlTableRow nicknameRow; + + /// <summary> + /// nicknameRequiredLabel control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.Label nicknameRequiredLabel; + + /// <summary> + /// nicknameTextBox control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.TextBox nicknameTextBox; + + /// <summary> + /// emailRow control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.HtmlControls.HtmlTableRow emailRow; + + /// <summary> + /// emailRequiredLabel control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.Label emailRequiredLabel; + + /// <summary> + /// emailTextBox control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.TextBox emailTextBox; + + /// <summary> + /// fullnameRow control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.HtmlControls.HtmlTableRow fullnameRow; + + /// <summary> + /// fullnameRequiredLabel control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.Label fullnameRequiredLabel; + + /// <summary> + /// fullnameTextBox control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.TextBox fullnameTextBox; + + /// <summary> + /// dateOfBirthRow control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.HtmlControls.HtmlTableRow dateOfBirthRow; + + /// <summary> + /// dobRequiredLabel control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.Label dobRequiredLabel; + + /// <summary> + /// dobDayDropdownlist control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.DropDownList dobDayDropdownlist; + + /// <summary> + /// dobMonthDropdownlist control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.DropDownList dobMonthDropdownlist; + + /// <summary> + /// dobYearDropdownlist control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.DropDownList dobYearDropdownlist; + + /// <summary> + /// genderRow control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.HtmlControls.HtmlTableRow genderRow; + + /// <summary> + /// genderRequiredLabel control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.Label genderRequiredLabel; + + /// <summary> + /// genderDropdownList control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.DropDownList genderDropdownList; + + /// <summary> + /// postcodeRow control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.HtmlControls.HtmlTableRow postcodeRow; + + /// <summary> + /// postcodeRequiredLabel control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.Label postcodeRequiredLabel; + + /// <summary> + /// postcodeTextBox control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.TextBox postcodeTextBox; + + /// <summary> + /// countryRow control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.HtmlControls.HtmlTableRow countryRow; + + /// <summary> + /// countryRequiredLabel control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.Label countryRequiredLabel; + + /// <summary> + /// countryDropdownList control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.DropDownList countryDropdownList; + + /// <summary> + /// languageRow control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.HtmlControls.HtmlTableRow languageRow; + + /// <summary> + /// languageRequiredLabel control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.Label languageRequiredLabel; + + /// <summary> + /// languageDropdownList control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.DropDownList languageDropdownList; + + /// <summary> + /// timezoneRow control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.HtmlControls.HtmlTableRow timezoneRow; + + /// <summary> + /// timezoneRequiredLabel control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.Label timezoneRequiredLabel; + + /// <summary> + /// timezoneDropdownList control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.DropDownList timezoneDropdownList; + } +} diff --git a/samples/ProviderPortal/Properties/AssemblyInfo.cs b/samples/ProviderPortal/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..42b2126 --- /dev/null +++ b/samples/ProviderPortal/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("OpenIdProviderWebForms sample")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("ProviderPortal")] +[assembly: AssemblyCopyright("Copyright © 2008")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("3d5900ae-111a-45be-96b3-d9e4606ca793")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/samples/ProviderPortal/Provider.ashx b/samples/ProviderPortal/Provider.ashx new file mode 100644 index 0000000..aa90b8f --- /dev/null +++ b/samples/ProviderPortal/Provider.ashx @@ -0,0 +1 @@ +<%@ WebHandler Language="C#" CodeBehind="Provider.ashx.cs" Class="OpenIdProviderWebForms.Provider" %> diff --git a/samples/ProviderPortal/Provider.ashx.cs b/samples/ProviderPortal/Provider.ashx.cs new file mode 100644 index 0000000..5257a5d --- /dev/null +++ b/samples/ProviderPortal/Provider.ashx.cs @@ -0,0 +1,61 @@ +namespace OpenIdProviderWebForms { + using System.Web; + using System.Web.SessionState; + using DotNetOpenAuth.OpenId.Provider; + + /// <summary> + /// A fast OpenID message handler that responds to OpenID messages + /// directed at the Provider. + /// </summary> + /// <remarks> + /// This performs the same function as server.aspx, which uses the ProviderEndpoint + /// control to reduce the amount of source code in the web site. A typical Provider + /// site will have EITHER this .ashx handler OR the .aspx page -- NOT both. + /// </remarks> + public class Provider : IHttpHandler, IRequiresSessionState { + public bool IsReusable { + get { return true; } + } + + public void ProcessRequest(HttpContext context) { + OpenIdProvider provider = new OpenIdProvider(); + IRequest request = provider.GetRequest(); + if (request != null) { + // Some OpenID requests are automatable and can be responded to immediately. + if (!request.IsResponseReady) { + // But authentication requests cannot be responded to until something on + // this site decides whether to approve or disapprove the authentication. + var idrequest = (IAuthenticationRequest)request; + + // We store the authentication request in the user's session so that + // redirects and user prompts can appear and eventually some page can decide + // to respond to the OpenID authentication request either affirmatively or + // negatively. + ProviderEndpoint.PendingAuthenticationRequest = idrequest; + + // We delegate that approval process to our utility method that we share + // with our other Provider sample page server.aspx. + Code.Util.ProcessAuthenticationChallenge(idrequest); + + // As part of authentication approval, the user may need to authenticate + // to this Provider and/or decide whether to allow the requesting RP site + // to log this user in. If any UI needs to be presented to the user, + // the previous call to ProcessAuthenticationChallenge MAY not return + // due to a redirect to some ASPX page. + } else { + // Some other automatable OpenID request is coming down, so clear + // any previously session stored authentication request that might be + // stored for this user. + ProviderEndpoint.PendingAuthenticationRequest = null; + } + + // Whether this was an automated message or an authentication message, + // if there is a response ready to send back immediately, do so. + if (request.IsResponseReady) { + request.Response.Send(); + ProviderEndpoint.PendingAuthenticationRequest = null; + } + } + } + } +} diff --git a/samples/ProviderPortal/Site.Master b/samples/ProviderPortal/Site.Master new file mode 100644 index 0000000..c7aa510 --- /dev/null +++ b/samples/ProviderPortal/Site.Master @@ -0,0 +1,20 @@ +<%@ Master Language="C#" AutoEventWireup="true" %> + +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head id="Head1" runat="server"> + <title>OpenID Provider, by DotNetOpenId</title> + <link href="/styles.css" rel="stylesheet" type="text/css" /> + <asp:ContentPlaceHolder ID="head" runat="server" /> +</head> +<body> + <form id="form1" runat="server"> + <div><a href="http://dotnetopenid.googlecode.com"> + <img runat="server" src="~/images/dotnetopenid_tiny.gif" title="Jump to the project web site." + alt="DotNetOpenId" border='0' /></a> </div> + <div> + <asp:ContentPlaceHolder ID="Main" runat="server" /> + </div> + </form> +</body> +</html> diff --git a/samples/ProviderPortal/TracePage.aspx b/samples/ProviderPortal/TracePage.aspx new file mode 100644 index 0000000..615b445 --- /dev/null +++ b/samples/ProviderPortal/TracePage.aspx @@ -0,0 +1,16 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="TracePage.aspx.cs" Inherits="OpenIdProviderWebForms.TracePage" %> + +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head runat="server"> + <title></title> +</head> +<body> + <form id="form1" runat="server"> + <p align="right"> + <asp:Button runat="server" Text="Clear log" ID="clearLogButton" OnClick="clearLogButton_Click" /> + </p> + <pre><asp:PlaceHolder runat="server" ID="placeHolder1" /></pre> + </form> +</body> +</html> diff --git a/samples/ProviderPortal/TracePage.aspx.cs b/samples/ProviderPortal/TracePage.aspx.cs new file mode 100644 index 0000000..5dcb18f --- /dev/null +++ b/samples/ProviderPortal/TracePage.aspx.cs @@ -0,0 +1,21 @@ +namespace OpenIdProviderWebForms { + using System; + using System.Collections.Generic; + using System.Web; + using System.Web.UI; + using System.Web.UI.WebControls; + using OpenIdProviderWebForms.Code; + + public partial class TracePage : System.Web.UI.Page { + protected void Page_Load(object sender, EventArgs e) { + this.placeHolder1.Controls.Add(new Label { Text = Global.LogMessages.ToString() }); + } + + protected void clearLogButton_Click(object sender, EventArgs e) { + Global.LogMessages.Length = 0; + + // clear the page immediately, and allow for F5 without a Postback warning. + Response.Redirect(Request.Url.AbsoluteUri); + } + } +}
\ No newline at end of file diff --git a/samples/ProviderPortal/TracePage.aspx.designer.cs b/samples/ProviderPortal/TracePage.aspx.designer.cs new file mode 100644 index 0000000..6760f9b --- /dev/null +++ b/samples/ProviderPortal/TracePage.aspx.designer.cs @@ -0,0 +1,43 @@ +//------------------------------------------------------------------------------ +// <auto-generated> +// This code was generated by a tool. +// Runtime Version:2.0.50727.3521 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// </auto-generated> +//------------------------------------------------------------------------------ + +namespace OpenIdProviderWebForms { + + + public partial class TracePage { + + /// <summary> + /// form1 control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// <summary> + /// clearLogButton control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.Button clearLogButton; + + /// <summary> + /// placeHolder1 control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.PlaceHolder placeHolder1; + } +} diff --git a/samples/ProviderPortal/Web.config b/samples/ProviderPortal/Web.config new file mode 100644 index 0000000..598e4bf --- /dev/null +++ b/samples/ProviderPortal/Web.config @@ -0,0 +1,192 @@ +<?xml version="1.0"?> +<!-- + Note: As an alternative to hand editing this file you can use the + web admin tool to configure settings for your application. Use + the Website->Asp.Net Configuration option in Visual Studio. + A full list of settings and comments can be found in + machine.config.comments usually located in + \Windows\Microsoft.Net\Framework\v2.x\Config +--> +<configuration> + <configSections> + <section name="uri" type="System.Configuration.UriSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/> + <section name="urlrewrites" type="OpenIdProviderWebForms.Code.URLRewriter" requirePermission="false"/> + <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler" requirePermission="false"/> + <section name="dotNetOpenAuth" type="DotNetOpenAuth.Configuration.DotNetOpenAuthSection" requirePermission="false" allowLocation="true"/> + <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> + <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> + <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/> + <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> + <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere"/> + <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/> + <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/> + <section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/> + </sectionGroup> + </sectionGroup> + </sectionGroup> + </configSections> + <!-- this is an optional configuration section where aspects of dotnetopenid can be customized --> + <dotNetOpenAuth> + <openid> + <provider> + <!-- Uncomment the following to activate the sample custom store. --> + <!--<store type="OpenIdProviderWebForms.Code.CustomStore, OpenIdProviderWebForms" />--> + </provider> + </openid> + <messaging> + <untrustedWebRequest> + <whitelistHosts> + <!-- since this is a sample, and will often be used with localhost --> + <add name="localhost"/> + </whitelistHosts> + </untrustedWebRequest> + </messaging> + </dotNetOpenAuth> + <!-- The uri section is necessary to turn on .NET 3.5 support for IDN (international domain names), + which is necessary for OpenID urls with unicode characters in the domain/host name. --> + <uri> + <idn enabled="All"/> + <iriParsing enabled="true"/> + </uri> + <connectionStrings/> + <!-- + Original version created by Richard Birkby (2002-02-22, http://www.codeproject.com/aspnet/URLRewriter.asp) + Maps from old website to new website using Regular Expressions + rule/url - old website url (Regular Expression) + rule/rewrite - new website replacement expression + Of two or more rules which match a given request, the first will always take precedance. + --> + <urlrewrites> + <rule> + <!-- This rewrites urls like: user/john ->user.aspx?username=john--> + <url>/user/(.*)</url> + <rewrite>/user.aspx?username=$1</rewrite> + </rule> + </urlrewrites> + <system.web> + <!-- + Set compilation debug="true" to insert debugging + symbols into the compiled page. Because this + affects performance, set this value to true only + during development. + --> + <compilation debug="true"> + <assemblies> + <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/> + <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> + <add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/> + <add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/> + </assemblies> + </compilation> + <sessionState mode="InProc" cookieless="false"/> + <membership defaultProvider="AspNetReadOnlyXmlMembershipProvider"> + <providers> + <clear/> + <add name="AspNetReadOnlyXmlMembershipProvider" type="OpenIdProviderWebForms.Code.ReadOnlyXmlMembershipProvider" description="Read-only XML membership provider" xmlFileName="~/App_Data/Users.xml"/> + </providers> + </membership> + <authentication mode="Forms"> + <forms name="ProviderSession"/> + <!-- named cookie prevents conflicts with other samples --> + </authentication> + <customErrors mode="RemoteOnly"/> + <!-- Trust level discussion: + Full: everything works + High: TRACE compilation symbol must NOT be defined + Medium/Low: doesn't work on default machine.config, because WebPermission.Connect is denied. + --> + <trust level="High" originUrl=""/> + <pages> + <controls> + <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> + <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> + </controls> + </pages> + <httpHandlers> + <remove verb="*" path="*.asmx"/> + <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> + <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> + <add verb="GET,HEAD" path="ScriptResource.axd" validate="false" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> + </httpHandlers> + <httpModules> + <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> + </httpModules> + </system.web> + <location path="decide.aspx"> + <system.web> + <authorization> + <deny users="?"/> + </authorization> + </system.web> + </location> + <!-- log4net is a 3rd party (free) logger library that dotnetopenid will use if present but does not require. --> + <log4net> + <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> + <file value="Provider.log"/> + <appendToFile value="true"/> + <rollingStyle value="Size"/> + <maxSizeRollBackups value="10"/> + <maximumFileSize value="100KB"/> + <staticLogFileName value="true"/> + <layout type="log4net.Layout.PatternLayout"> + <conversionPattern value="%date (GMT%date{%z}) [%thread] %-5level %logger - %message%newline"/> + </layout> + </appender> + <appender name="TracePageAppender" type="ProviderPortal.Code.TracePageAppender, ProviderPortal"> + <layout type="log4net.Layout.PatternLayout"> + <conversionPattern value="%date (GMT%date{%z}) [%thread] %-5level %logger - %message%newline"/> + </layout> + </appender> + <!-- Setup the root category, add the appenders and set the default level --> + <root> + <level value="INFO"/> + <!--<appender-ref ref="RollingFileAppender" />--> + <appender-ref ref="TracePageAppender"/> + </root> + <!-- Specify the level for some specific categories --> + <logger name="DotNetOpenId"> + <level value="ALL"/> + </logger> + </log4net> + <system.codedom> + <compilers> + <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CSharp.CSharpCodeProvider,System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4"> + <providerOption name="CompilerVersion" value="v3.5"/> + <providerOption name="WarnAsError" value="false"/> + </compiler> + <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.VisualBasic.VBCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4"> + <providerOption name="CompilerVersion" value="v3.5"/> + <providerOption name="OptionInfer" value="true"/> + <providerOption name="WarnAsError" value="false"/> + </compiler> + </compilers> + </system.codedom> + <system.webServer> + <validation validateIntegratedModeConfiguration="false"/> + <modules> + <remove name="ScriptModule"/> + <add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> + </modules> + <handlers> + <remove name="WebServiceHandlerFactory-Integrated"/> + <remove name="ScriptHandlerFactory"/> + <remove name="ScriptHandlerFactoryAppServices"/> + <remove name="ScriptResource"/> + <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> + <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> + <add name="ScriptResource" verb="GET,HEAD" path="ScriptResource.axd" preCondition="integratedMode" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> + </handlers> + </system.webServer> + <runtime> + <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> + <dependentAssembly> + <assemblyIdentity name="System.Web.Extensions" publicKeyToken="31bf3856ad364e35"/> + <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/> + </dependentAssembly> + <dependentAssembly> + <assemblyIdentity name="System.Web.Extensions.Design" publicKeyToken="31bf3856ad364e35"/> + <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/> + </dependentAssembly> + </assemblyBinding> + </runtime> +</configuration> diff --git a/samples/ProviderPortal/decide.aspx b/samples/ProviderPortal/decide.aspx new file mode 100644 index 0000000..54c2f01 --- /dev/null +++ b/samples/ProviderPortal/decide.aspx @@ -0,0 +1,34 @@ +<%@ Page Language="C#" AutoEventWireup="true" Inherits="OpenIdProviderWebForms.decide" CodeBehind="decide.aspx.cs" MasterPageFile="~/Site.Master" %> + +<%@ Register Src="ProfileFields.ascx" TagName="ProfileFields" TagPrefix="uc1" %> +<asp:Content runat="server" ContentPlaceHolderID="Main"> + <p> + A site has asked to authenticate that you own the identifier below. You should + only do this if you wish to log in to the site given by the Realm.</p> + <p> + This site + <asp:Label ID="relyingPartyVerificationResultLabel" runat="server" + Font-Bold="True" Text="failed" /> verification. </p> + <table> + <tr> + <td> + Identifier: </td> + <td> + <asp:Label runat="server" ID='identityUrlLabel' /> + </td> + </tr> + <tr> + <td> + Realm: </td> + <td> + <asp:Label runat="server" ID='realmLabel' /> + </td> + </tr> + </table> + <p> + Allow this authentication to proceed? + </p> + <uc1:ProfileFields ID="profileFields" runat="server" Visible="false" /> + <asp:Button ID="yes_button" OnClick="Yes_Click" Text=" yes " runat="Server" /> + <asp:Button ID="no_button" OnClick="No_Click" Text=" no " runat="Server" /> +</asp:Content>
\ No newline at end of file diff --git a/samples/ProviderPortal/decide.aspx.cs b/samples/ProviderPortal/decide.aspx.cs new file mode 100644 index 0000000..1ca0138 --- /dev/null +++ b/samples/ProviderPortal/decide.aspx.cs @@ -0,0 +1,75 @@ +namespace OpenIdProviderWebForms { + using System; + using System.Diagnostics; + using System.Web.Security; + using System.Web.UI; + using DotNetOpenAuth.OpenId.Extensions.ProviderAuthenticationPolicy; + using DotNetOpenAuth.OpenId.Extensions.SimpleRegistration; + using DotNetOpenAuth.OpenId.Provider; + + /// <summary> + /// Page for giving the user the option to continue or cancel out of authentication with a consumer. + /// </summary> + public partial class decide : Page { + protected void Page_Load(object src, EventArgs e) { + if (ProviderEndpoint.PendingAuthenticationRequest == null) { + Response.Redirect("~/"); + } + + if (ProviderEndpoint.PendingAuthenticationRequest.IsDirectedIdentity) { + ProviderEndpoint.PendingAuthenticationRequest.LocalIdentifier = Code.Util.BuildIdentityUrl(); + } + this.relyingPartyVerificationResultLabel.Text = + ProviderEndpoint.PendingAuthenticationRequest.IsReturnUrlDiscoverable ? "passed" : "failed"; + + this.identityUrlLabel.Text = ProviderEndpoint.PendingAuthenticationRequest.LocalIdentifier.ToString(); + this.realmLabel.Text = ProviderEndpoint.PendingAuthenticationRequest.Realm.ToString(); + + // check that the logged in user is the same as the user requesting authentication to the consumer. If not, then log them out. + if (string.Equals(User.Identity.Name, Code.Util.ExtractUserName(ProviderEndpoint.PendingAuthenticationRequest.LocalIdentifier), StringComparison.OrdinalIgnoreCase)) { + // if simple registration fields were used, then prompt the user for them + var requestedFields = ProviderEndpoint.PendingAuthenticationRequest.GetExtension<ClaimsRequest>(); + if (requestedFields != null) { + this.profileFields.Visible = true; + this.profileFields.SetRequiredFieldsFromRequest(requestedFields); + if (!IsPostBack) { + var sregResponse = requestedFields.CreateResponse(); + sregResponse.Email = Membership.GetUser().Email; + this.profileFields.SetOpenIdProfileFields(sregResponse); + } + } + } else { + FormsAuthentication.SignOut(); + Response.Redirect(Request.Url.AbsoluteUri); + } + } + + protected void Yes_Click(object sender, EventArgs e) { + var sregRequest = ProviderEndpoint.PendingAuthenticationRequest.GetExtension<ClaimsRequest>(); + ClaimsResponse sregResponse = null; + if (sregRequest != null) { + sregResponse = this.profileFields.GetOpenIdProfileFields(sregRequest); + ProviderEndpoint.PendingAuthenticationRequest.AddResponseExtension(sregResponse); + } + var papeRequest = ProviderEndpoint.PendingAuthenticationRequest.GetExtension<PolicyRequest>(); + PolicyResponse papeResponse = null; + if (papeRequest != null) { + papeResponse = new PolicyResponse(); + papeResponse.NistAssuranceLevel = NistAssuranceLevel.InsufficientForLevel1; + ProviderEndpoint.PendingAuthenticationRequest.AddResponseExtension(papeResponse); + } + + ProviderEndpoint.PendingAuthenticationRequest.IsAuthenticated = true; + Debug.Assert(ProviderEndpoint.PendingAuthenticationRequest.IsResponseReady, "Setting authentication should be all that's necessary."); + ProviderEndpoint.PendingAuthenticationRequest.Response.Send(); + ProviderEndpoint.PendingAuthenticationRequest = null; + } + + protected void No_Click(object sender, EventArgs e) { + ProviderEndpoint.PendingAuthenticationRequest.IsAuthenticated = false; + Debug.Assert(ProviderEndpoint.PendingAuthenticationRequest.IsResponseReady, "Setting authentication should be all that's necessary."); + ProviderEndpoint.PendingAuthenticationRequest.Response.Send(); + ProviderEndpoint.PendingAuthenticationRequest = null; + } + } +}
\ No newline at end of file diff --git a/samples/ProviderPortal/decide.aspx.designer.cs b/samples/ProviderPortal/decide.aspx.designer.cs new file mode 100644 index 0000000..795d1c7 --- /dev/null +++ b/samples/ProviderPortal/decide.aspx.designer.cs @@ -0,0 +1,70 @@ +//------------------------------------------------------------------------------ +// <auto-generated> +// This code was generated by a tool. +// Runtime Version:2.0.50727.3521 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// </auto-generated> +//------------------------------------------------------------------------------ + +namespace OpenIdProviderWebForms { + + + public partial class decide { + + /// <summary> + /// relyingPartyVerificationResultLabel control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.Label relyingPartyVerificationResultLabel; + + /// <summary> + /// identityUrlLabel control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.Label identityUrlLabel; + + /// <summary> + /// realmLabel control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.Label realmLabel; + + /// <summary> + /// profileFields control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::OpenIdProviderWebForms.ProfileFields profileFields; + + /// <summary> + /// yes_button control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.Button yes_button; + + /// <summary> + /// no_button control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.Button no_button; + } +} diff --git a/samples/ProviderPortal/favicon.ico b/samples/ProviderPortal/favicon.ico Binary files differnew file mode 100644 index 0000000..beb3cb5 --- /dev/null +++ b/samples/ProviderPortal/favicon.ico diff --git a/samples/ProviderPortal/images/dotnetopenid_tiny.gif b/samples/ProviderPortal/images/dotnetopenid_tiny.gif Binary files differnew file mode 100644 index 0000000..c4ed4f5 --- /dev/null +++ b/samples/ProviderPortal/images/dotnetopenid_tiny.gif diff --git a/samples/ProviderPortal/login.aspx b/samples/ProviderPortal/login.aspx new file mode 100644 index 0000000..e8f42c5 --- /dev/null +++ b/samples/ProviderPortal/login.aspx @@ -0,0 +1,17 @@ +<%@ Page Language="C#" AutoEventWireup="true" Inherits="OpenIdProviderWebForms.login" CodeBehind="login.aspx.cs" MasterPageFile="~/Site.Master" %> +<asp:Content ID="Content1" runat="server" ContentPlaceHolderID="Main"> + <p> + Usernames are defined in the App_Data\Users.xml file. + </p> + <asp:Login runat="server" ID="login1" /> + + <p>Credentials to try (each with their own OpenID)</p> + <table> + <tr><td>Username</td><td>Password</td></tr> + <tr><td>bob</td><td>test</td></tr> + <tr><td>bob1</td><td>test</td></tr> + <tr><td>bob2</td><td>test</td></tr> + <tr><td>bob3</td><td>test</td></tr> + <tr><td>bob4</td><td>test</td></tr> + </table> +</asp:Content>
\ No newline at end of file diff --git a/samples/ProviderPortal/login.aspx.cs b/samples/ProviderPortal/login.aspx.cs new file mode 100644 index 0000000..4051877 --- /dev/null +++ b/samples/ProviderPortal/login.aspx.cs @@ -0,0 +1,22 @@ +namespace OpenIdProviderWebForms { + using System; + using System.Web.UI.WebControls; + using DotNetOpenAuth.OpenId.Provider; + + /// <summary> + /// Page for handling logins to this server. + /// </summary> + public partial class login : System.Web.UI.Page { + protected void Page_Load(object src, EventArgs e) { + if (!IsPostBack) { + if (ProviderEndpoint.PendingAuthenticationRequest != null && + !ProviderEndpoint.PendingAuthenticationRequest.IsDirectedIdentity) { + this.login1.UserName = Code.Util.ExtractUserName( + ProviderEndpoint.PendingAuthenticationRequest.LocalIdentifier); + ((TextBox)this.login1.FindControl("UserName")).ReadOnly = true; + this.login1.FindControl("Password").Focus(); + } + } + } + } +}
\ No newline at end of file diff --git a/samples/ProviderPortal/login.aspx.designer.cs b/samples/ProviderPortal/login.aspx.designer.cs new file mode 100644 index 0000000..83826a1 --- /dev/null +++ b/samples/ProviderPortal/login.aspx.designer.cs @@ -0,0 +1,25 @@ +//------------------------------------------------------------------------------ +// <auto-generated> +// This code was generated by a tool. +// Runtime Version:2.0.50727.3521 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// </auto-generated> +//------------------------------------------------------------------------------ + +namespace OpenIdProviderWebForms { + + + public partial class login { + + /// <summary> + /// login1 control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.Login login1; + } +} diff --git a/samples/ProviderPortal/op_xrds.aspx b/samples/ProviderPortal/op_xrds.aspx new file mode 100644 index 0000000..afcfc75 --- /dev/null +++ b/samples/ProviderPortal/op_xrds.aspx @@ -0,0 +1,19 @@ +<%@ Page Language="C#" AutoEventWireup="true" ContentType="application/xrds+xml" %><?xml version="1.0" encoding="UTF-8"?> +<%-- +This page is a required as part of the service discovery phase of the openid +protocol (step 1). It simply renders the xml for doing service discovery of +server.aspx using the xrds mechanism. +This XRDS doc is discovered via the user.aspx page. +--%> +<xrds:XRDS + xmlns:xrds="xri://$xrds" + xmlns:openid="http://openid.net/xmlns/1.0" + xmlns="xri://$xrd*($v*2.0)"> + <XRD> + <Service priority="10"> + <Type>http://specs.openid.net/auth/2.0/server</Type> + <Type>http://openid.net/extensions/sreg/1.1</Type> + <URI><%=new Uri(Request.Url, Response.ApplyAppPathModifier("~/server.aspx"))%></URI> + </Service> + </XRD> +</xrds:XRDS> diff --git a/samples/ProviderPortal/server.aspx b/samples/ProviderPortal/server.aspx new file mode 100644 index 0000000..10030a6 --- /dev/null +++ b/samples/ProviderPortal/server.aspx @@ -0,0 +1,53 @@ +<%@ Page Language="C#" AutoEventWireup="true" Inherits="OpenIdProviderWebForms.server" CodeBehind="server.aspx.cs" ValidateRequest="false" %> + +<%@ Register Assembly="DotNetOpenAuth" Namespace="DotNetOpenAuth.OpenId.Provider" TagPrefix="openid" %> +<html> +<head> + <title>This is an OpenID server</title> +</head> +<body> + <form runat='server'> + <%-- This page provides an example of how to use the ProviderEndpoint control on an ASPX page + to host an OpenID Provider. Alternatively for greater performance an .ashx file can be used. + See Provider.ashx for an example. A typical web site will NOT use both .ashx and .aspx + provider endpoints. + This server.aspx page is the default provider endpoint to use. To switch to the .ashx handler, + change the user_xrds.aspx and op_xrds.aspx files to point to provider.ashx instead of server.aspx. + --%> + <openid:ProviderEndpoint runat="server" OnAuthenticationChallenge="provider_AuthenticationChallenge" /> + <p> + <asp:Label ID="serverEndpointUrl" runat="server" EnableViewState="false" /> + is an OpenID server endpoint. + </p> + <p> + For more information about OpenID, see: + </p> + <table> + <tr> + <td> + <a href="http://dotnetopenid.googlecode.com/">http://dotnetopenid.googlecode.com/</a> + </td> + <td> + Home of this library + </td> + </tr> + <tr> + <td> + <a href="http://www.openid.net/">http://www.openid.net/</a> + </td> + <td> + The official OpenID Web site + </td> + </tr> + <tr> + <td> + <a href="http://www.openidenabled.com/">http://www.openidenabled.com/</a> + </td> + <td> + An OpenID community Web site + </td> + </tr> + </table> + </form> +</body> +</html> diff --git a/samples/ProviderPortal/server.aspx.cs b/samples/ProviderPortal/server.aspx.cs new file mode 100644 index 0000000..c0af0b4 --- /dev/null +++ b/samples/ProviderPortal/server.aspx.cs @@ -0,0 +1,18 @@ +namespace OpenIdProviderWebForms { + using System; + using DotNetOpenAuth.OpenId.Provider; + + /// <summary> + /// This is the primary page for this open-id provider. + /// This page is responsible for handling all open-id compliant requests. + /// </summary> + public partial class server : System.Web.UI.Page { + protected void Page_Load(object src, System.EventArgs evt) { + this.serverEndpointUrl.Text = Request.Url.ToString(); + } + + protected void provider_AuthenticationChallenge(object sender, AuthenticationChallengeEventArgs e) { + Code.Util.ProcessAuthenticationChallenge(e.Request); + } + } +}
\ No newline at end of file diff --git a/samples/ProviderPortal/server.aspx.designer.cs b/samples/ProviderPortal/server.aspx.designer.cs new file mode 100644 index 0000000..89c8c8a --- /dev/null +++ b/samples/ProviderPortal/server.aspx.designer.cs @@ -0,0 +1,25 @@ +//------------------------------------------------------------------------------ +// <auto-generated> +// This code was generated by a tool. +// Runtime Version:2.0.50727.3521 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// </auto-generated> +//------------------------------------------------------------------------------ + +namespace OpenIdProviderWebForms { + + + public partial class server { + + /// <summary> + /// serverEndpointUrl control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.Label serverEndpointUrl; + } +} diff --git a/samples/ProviderPortal/styles.css b/samples/ProviderPortal/styles.css new file mode 100644 index 0000000..2e4d3db --- /dev/null +++ b/samples/ProviderPortal/styles.css @@ -0,0 +1,10 @@ +h2 +{ + font-style: italic; +} + +body +{ + font-family: Cambria, Arial, Times New Roman; + font-size: 12pt; +}
\ No newline at end of file diff --git a/samples/ProviderPortal/user.aspx b/samples/ProviderPortal/user.aspx new file mode 100644 index 0000000..7306e79 --- /dev/null +++ b/samples/ProviderPortal/user.aspx @@ -0,0 +1,17 @@ +<%@ Page Language="C#" AutoEventWireup="true" Inherits="OpenIdProviderWebForms.user" CodeBehind="user.aspx.cs" MasterPageFile="~/Site.Master" %> + +<%@ Register Assembly="DotNetOpenAuth" Namespace="DotNetOpenAuth.OpenId.Provider" TagPrefix="openid" %> +<asp:Content ID="Content2" runat="server" ContentPlaceHolderID="head"> + <openid:IdentityEndpoint ID="IdentityEndpoint20" runat="server" ProviderEndpointUrl="~/Server.aspx" + XrdsUrl="~/user_xrds.aspx" ProviderVersion="V20" + AutoNormalizeRequest="true" OnNormalizeUri="IdentityEndpoint20_NormalizeUri" /> + <!-- and for backward compatibility with OpenID 1.x RPs... --> + <openid:IdentityEndpoint ID="IdentityEndpoint11" runat="server" ProviderEndpointUrl="~/Server.aspx" + ProviderVersion="V11" /> +</asp:Content> +<asp:Content ID="Content1" runat="server" ContentPlaceHolderID="Main"> + <p> + OpenID identity page for + <asp:Label runat="server" ID="usernameLabel" EnableViewState="false" /> + </p> +</asp:Content>
\ No newline at end of file diff --git a/samples/ProviderPortal/user.aspx.cs b/samples/ProviderPortal/user.aspx.cs new file mode 100644 index 0000000..f530f15 --- /dev/null +++ b/samples/ProviderPortal/user.aspx.cs @@ -0,0 +1,33 @@ +namespace OpenIdProviderWebForms { + using System; + using DotNetOpenAuth.OpenId.Provider; + + /// <summary> + /// This page is a required as part of the service discovery phase of the openid protocol (step 1). + /// </summary> + /// <remarks> + /// <para>How does a url like http://www.myserver.com/user/bob map to http://www.myserver.com/user.aspx?username=bob ? + /// Check out gobal.asax and the URLRewriter class. Essentially there's a little framework that allows for URLRewrting using the HttpContext.Current.RewritePath method.</para> + /// <para>A url such as http://www.myserver.com/user/bob which is entered on the consumer side will cause this page to be invoked. + /// This page must be parsed by the openid compatible consumer and the url of the openid server is extracted from href in: rel="openid.server" href="?". + /// It is the responsibility of the consumer to redirect the user to this url.</para> + /// <para>The XRDS (or Yadis) content is also rendered to provide the consumer with an alternative discovery mechanism. The Yadis protocol allows the consumer + /// to provide the user with a more flexible range of authentication mechanisms (which ever has been defined in xrds.aspx). See http://en.wikipedia.org/wiki/Yadis.</para> + /// </remarks> + public partial class user : System.Web.UI.Page { + protected void Page_Load(object sender, EventArgs e) { + this.usernameLabel.Text = Request.QueryString["username"]; + } + + protected void IdentityEndpoint20_NormalizeUri(object sender, IdentityEndpointNormalizationEventArgs e) { + // This sample Provider has a custom policy for normalizing URIs, which is that the whole + // path of the URI be lowercase except for the first letter of the username. + UriBuilder normalized = new UriBuilder(e.UserSuppliedIdentifier); + string username = Request.QueryString["username"].TrimEnd('/').ToLowerInvariant(); + username = username.Substring(0, 1).ToUpperInvariant() + username.Substring(1); + normalized.Path = "/user/" + username; + normalized.Scheme = "http"; // for a real Provider, this should be HTTPS if supported. + e.NormalizedIdentifier = normalized.Uri; + } + } +}
\ No newline at end of file diff --git a/samples/ProviderPortal/user.aspx.designer.cs b/samples/ProviderPortal/user.aspx.designer.cs new file mode 100644 index 0000000..ab7b4a1 --- /dev/null +++ b/samples/ProviderPortal/user.aspx.designer.cs @@ -0,0 +1,43 @@ +//------------------------------------------------------------------------------ +// <auto-generated> +// This code was generated by a tool. +// Runtime Version:2.0.50727.3521 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// </auto-generated> +//------------------------------------------------------------------------------ + +namespace OpenIdProviderWebForms { + + + public partial class user { + + /// <summary> + /// IdentityEndpoint20 control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::DotNetOpenAuth.OpenId.Provider.IdentityEndpoint IdentityEndpoint20; + + /// <summary> + /// IdentityEndpoint11 control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::DotNetOpenAuth.OpenId.Provider.IdentityEndpoint IdentityEndpoint11; + + /// <summary> + /// usernameLabel control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.Label usernameLabel; + } +} diff --git a/samples/ProviderPortal/user_xrds.aspx b/samples/ProviderPortal/user_xrds.aspx new file mode 100644 index 0000000..275e413 --- /dev/null +++ b/samples/ProviderPortal/user_xrds.aspx @@ -0,0 +1,24 @@ +<%@ Page Language="C#" AutoEventWireup="true" ContentType="application/xrds+xml" %><?xml version="1.0" encoding="UTF-8"?> +<%-- +This page is a required as part of the service discovery phase of the openid +protocol (step 1). It simply renders the xml for doing service discovery of +server.aspx using the xrds mechanism. +This XRDS doc is discovered via the user.aspx page. +--%> +<xrds:XRDS + xmlns:xrds="xri://$xrds" + xmlns:openid="http://openid.net/xmlns/1.0" + xmlns="xri://$xrd*($v*2.0)"> + <XRD> + <Service priority="10"> + <Type>http://specs.openid.net/auth/2.0/signon</Type> + <Type>http://openid.net/extensions/sreg/1.1</Type> + <URI><%=new Uri(Request.Url, Response.ApplyAppPathModifier("~/server.aspx"))%></URI> + </Service> + <Service priority="20"> + <Type>http://openid.net/signon/1.0</Type> + <Type>http://openid.net/extensions/sreg/1.1</Type> + <URI><%=new Uri(Request.Url, Response.ApplyAppPathModifier("~/server.aspx"))%></URI> + </Service> + </XRD> +</xrds:XRDS> diff --git a/samples/RelyingPartyClassicAsp/MembersOnly.asp b/samples/RelyingPartyClassicAsp/MembersOnly.asp new file mode 100644 index 0000000..16361cf --- /dev/null +++ b/samples/RelyingPartyClassicAsp/MembersOnly.asp @@ -0,0 +1,27 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<% +If Session("ClaimedIdentifier") = "" Then + Response.Redirect("login.asp") +End If +%> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <title>DotNetOpenAuth Classic ASP sample: Members Only area</title> + <link href="styles.css" rel="stylesheet" type="text/css" /> +</head> +<body> + <div> + <a href="http://DotNetOpenId.googlecode.com"> + <img runat="server" src="images/DotNetOpenId_tiny.gif" title="Jump to the project web site." + alt="DotNetOpenAuth" border='0' /></a> + </div> + <h2> + Members Only Area + </h2> + <p> + Congratulations, <b><%=Session("ClaimedIdentifier") %></b>. + You have completed the OpenID login process. + </p> + <p><a href="logout.asp">Log out</a>. </p> +</body> +</html> diff --git a/samples/RelyingPartyClassicAsp/default.asp b/samples/RelyingPartyClassicAsp/default.asp new file mode 100644 index 0000000..99bf93b --- /dev/null +++ b/samples/RelyingPartyClassicAsp/default.asp @@ -0,0 +1,39 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <title>DotNetOpenAuth Classic ASP sample</title> + <link href="styles.css" rel="stylesheet" type="text/css" /> +</head> +<body> + <div> + <a href="http://DotNetOpenId.googlecode.com"> + <img runat="server" src="images/DotNetOpenId_tiny.gif" title="Jump to the project web site." + alt="DotNetOpenAuth" border='0' /></a> + </div> + <h2>Classic ASP Relying Party</h2> + <p>Visit the <a href="MembersOnly.asp">Members Only</a> area. (This will trigger + a login demo). </p> + <h3>Required steps for this sample to work on your own machine:</h3> + <p>Although classic ASP cannot access .NET assemblies directly, it does know how to + call COM components. DotNetOpenAuth exposes a COM server to allow classic ASP + and other COM clients to utilize it for easy OpenID support. The DotNetOpenAuth.dll + assembly must be registered as a COM server on each development box and web server + in order for COM clients such as classic ASP to find it.</p> + <p>To register DotNetOpenAuth as a COM server, complete these steps.</p> + <ol> + <li>At an administrator command prompt, navigate to a directory where the DotNetOpenAuth + assembly is found.</li> + <li>Register DotNetOpenAuth as a COM server:<br /> + <span class="command">%windir%\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe + /tlb DotNetOpenAuth.dll</span></li> + <li>Install DotNetOpenAuth into the GAC. The gacutil.exe tool may be in an SDK + directory, which will be in your path if you opened a Visual Studio Command Prompt.<br /> + <span class="command">gacutil.exe /i DotNetOpenAuth.dll</span></li> + </ol> + <p>Another thing to be aware of is that with classic ASP there is no Web.config + file in which to customize DotNetOpenAuth behavior. And the COM interfaces + that DotNetOpenAuth exposes are a very limited subset of full functionality + available to .NET clients. Please send feature requests to + <a href="mailto:DotNetOpenId@googlegroups.com">DotNetOpenId@googlegroups.com</a>.</p> +</body> +</html> diff --git a/samples/RelyingPartyClassicAsp/images/dotnetopenid_tiny.gif b/samples/RelyingPartyClassicAsp/images/dotnetopenid_tiny.gif Binary files differnew file mode 100644 index 0000000..c4ed4f5 --- /dev/null +++ b/samples/RelyingPartyClassicAsp/images/dotnetopenid_tiny.gif diff --git a/samples/RelyingPartyClassicAsp/images/openid_login.gif b/samples/RelyingPartyClassicAsp/images/openid_login.gif Binary files differnew file mode 100644 index 0000000..cde836c --- /dev/null +++ b/samples/RelyingPartyClassicAsp/images/openid_login.gif diff --git a/samples/RelyingPartyClassicAsp/login.asp b/samples/RelyingPartyClassicAsp/login.asp new file mode 100644 index 0000000..304e326 --- /dev/null +++ b/samples/RelyingPartyClassicAsp/login.asp @@ -0,0 +1,45 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <title>DotNetOpenAuth Classic ASP sample: Login</title> + <link href="styles.css" rel="stylesheet" type="text/css" /> +</head> +<body> + <div> + <a href="http://DotNetOpenId.googlecode.com"> + <img runat="server" src="images/DotNetOpenId_tiny.gif" title="Jump to the project web site." + alt="DotNetOpenAuth" border='0' /></a> + </div> + <h2>Login Page</h2> + <% + dim realm, thisPageUrl, requestUrl, dnoi, authentication + realm = "http://" + Request.ServerVariables("HTTP_HOST") + "/classicaspdnoi/" + thisPageUrl = "http://" + Request.ServerVariables("HTTP_HOST") + Request.ServerVariables("URL") + requestUrl = "http://" + Request.ServerVariables("HTTP_HOST") + Request.ServerVariables("HTTP_URL") + Set dnoi = server.CreateObject("DotNetOpenAuth.RelyingParty.OpenIdRelyingParty") + Set authentication = dnoi.ProcessAuthentication(requestUrl, Request.Form) + if Not authentication Is Nothing then + If authentication.Successful Then + Session("ClaimedIdentifier") = authentication.ClaimedIdentifier + Response.Redirect "MembersOnly.asp" + else + Response.Write "Authentication failed: " + authentication.ExceptionMessage + end if + elseif Request.Form("openid_identifier") <> "" then + dim redirectUrl + redirectUrl = dnoi.CreateRequest(Request.Form("openid_identifier"), realm, thisPageUrl) + Response.Redirect redirectUrl + End If + %> + <form action="login.asp" method="post"> + OpenID Login: + <input class="openid" name="openid_identifier" value="<%=Server.HTMLEncode(Request.Form("openid_identifier"))%>" /> + <input type="submit" value="Login" /> + </form> + + <script> + document.getElementsByName('openid_identifier')[0].focus(); + </script> + +</body> +</html> diff --git a/samples/RelyingPartyClassicAsp/logout.asp b/samples/RelyingPartyClassicAsp/logout.asp new file mode 100644 index 0000000..a3f0633 --- /dev/null +++ b/samples/RelyingPartyClassicAsp/logout.asp @@ -0,0 +1,12 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <title>DotNetOpenAuth Classic ASP sample</title> +</head> +<body> + <% + Session.Abandon + Response.Redirect "default.asp" + %> +</body> +</html> diff --git a/samples/RelyingPartyClassicAsp/styles.css b/samples/RelyingPartyClassicAsp/styles.css new file mode 100644 index 0000000..d777e33 --- /dev/null +++ b/samples/RelyingPartyClassicAsp/styles.css @@ -0,0 +1,23 @@ +h2 +{ + font-style: italic; +} + +body +{ + font-family: Cambria, Arial, Times New Roman; + font-size: 12pt; +} + +.command +{ + font-family: "Courier New", Courier, monospace; +} + +input.openid +{ + background-image: url(images/openid_login.gif); + background-repeat: no-repeat; + background-position: 0 50%; + padding-left: 15px; +} diff --git a/samples/RelyingPartyMvc/.gitignore b/samples/RelyingPartyMvc/.gitignore new file mode 100644 index 0000000..0b08797 --- /dev/null +++ b/samples/RelyingPartyMvc/.gitignore @@ -0,0 +1,5 @@ +Bin +obj +*Trace.txt +*.user +StyleCop.Cache diff --git a/samples/RelyingPartyMvc/Content/Site.css b/samples/RelyingPartyMvc/Content/Site.css new file mode 100644 index 0000000..6fda856 --- /dev/null +++ b/samples/RelyingPartyMvc/Content/Site.css @@ -0,0 +1,265 @@ +/*---------------------------------------------------------- +The base color for this template is #5c87b2. If you'd like +to use a different color start by replacing all instances of +#5c87b2 with your new color. +----------------------------------------------------------*/ +body +{ + background-color: #5c87b2; + font-size: .75em; + font-family: Verdana, Helvetica, Sans-Serif; + margin: 0; + padding: 0; + color: #696969; +} + +a:link +{ + color: #034af3; + text-decoration: underline; +} +a:visited +{ + color: #505abc; +} +a:hover +{ + color: #1d60ff; + text-decoration: none; +} +a:active +{ + color: #12eb87; +} + +p, ul +{ + margin-bottom: 20px; + line-height: 1.6em; +} + +/* HEADINGS +----------------------------------------------------------*/ +h1, h2, h3, h4, h5, h6 +{ + font-size: 1.5em; + color: #000; + font-family: Arial, Helvetica, sans-serif; +} + +h1 +{ + font-size: 2em; + padding-bottom: 0; + margin-bottom: 0; +} +h2 +{ + border-bottom: 1px solid #5c87b2; + padding: 0 0 10px 0; +} +h3 +{ + font-size: 1.2em; +} +h4 +{ + font-size: 1.1em; +} +h5, h6 +{ + font-size: 1em; +} + +/* this rule styles <h2> tags that are the +first child of the left and right table columns */ +.rightColumn > h1, .rightColumn > h2, .leftColumn > h1, .leftColumn > h2 +{ + margin-top: 0; +} + +/* PRIMARY LAYOUT ELEMENTS +----------------------------------------------------------*/ + +/* you can specify a greater or lesser percentage for the +page width. Or, you can specify an exact pixel width. */ +.page +{ + width: 80%; + margin-left: auto; + margin-right: auto; +} + +#header +{ + position: relative; + margin-bottom: 0px; + color: #000; + padding: 0 0px 0 0; +} + +p#logo, h1#logo +{ + font-weight: bold; + font-size: 24px !important; + padding: 10px 0; + margin: 0; + color: #FFF; + border: none; + line-height: 2em; + font-family: Arial, Helvetica, sans-serif; +} + +#logo a +{ + color: #FFF; + text-decoration: none; + font-size: 32px !important; +} + +#mainContent +{ + padding: 30px 30px 15px 30px; + background-color: #FFF; + border-bottom: 3px groove #4b6f92; + margin-bottom: 30px; + _height: 1px; /* only IE6 applies CSS properties starting with an underscrore */ +} + +.columnsContainer +{ + position: relative; +} + +.leftColumn +{ + width: 25%; + margin-right: 4%; + float: left; +} + +.rightColumn +{ + float: right; + width: 70%; +} + +#footer +{ + color: #999; + padding: 5px 0 0 0; + border-top: 1px solid #5C87B2; + text-align: center; + line-height: normal; +} + +#footer p +{ + padding: 5px 0; + margin: 0; +} + +/* MAIN MENU +----------------------------------------------------------*/ +ul#mainMenu +{ + border-bottom: 1px #5C87B2 solid; + padding: 0 0 2px; + position: relative; + margin: 0; + text-align: right; +} + +ul#mainMenu li +{ + display: inline; + list-style: none; +} + +ul#mainMenu li a +{ + padding: 10px 20px; + font-weight: bold; + text-decoration: none; + line-height: 2.8em; + background-color: #e8eef4; + color: #034af3; +} + +ul#mainMenu li a:hover +{ + background-color: #FFF; + text-decoration: none; +} + +ul#mainMenu li a:active +{ + background-color: #a6e2a6; + text-decoration: none; +} + +ul#mainMenu li.selected a +{ + background-color: #FFF; + color: #000; +} + +/* SIDE COLUMN LINKS & HEADINGS +----------------------------------------------------------*/ +.leftColumn ul +{ + margin: 0; + padding: 0 0 30px 0; +} + +.leftColumn ul li +{ + list-style: none; + margin-top: 5px; + line-height: normal; +} + +.leftColumn ul li a +{ + list-style: none; + padding: 5px; + border: 1px solid #e8eef4; + line-height: normal; + display: block; + text-decoration: none; + background-color: #e8eef4; + font-size: .9em; + _height: 1px; /* only IE6 applies CSS properties starting with an underscrore */ +} + +.leftColumn ul li a:hover +{ + text-decoration: none; + background-color: #FFF; + border-color: #e2e7ed; +} + +.leftColumn ul li a:active +{ + text-decoration: none; + background-color: #a6e2a6; + border-color: #a6e2a6; + color: #FFF; +} + +.leftColumn h2 +{ + font-size: 1.2em; + padding: 5px; + margin: 0px; + border-color: #5C87B2; + background-color: #5C87B2; + color: #FFF; +} + +/* MISC +----------------------------------------------------------*/ +.clear +{ + clear: both; +} diff --git a/samples/RelyingPartyMvc/Controllers/HomeController.cs b/samples/RelyingPartyMvc/Controllers/HomeController.cs new file mode 100644 index 0000000..ac33185 --- /dev/null +++ b/samples/RelyingPartyMvc/Controllers/HomeController.cs @@ -0,0 +1,20 @@ +namespace RelyingPartyMvc.Controllers { + using System; + using System.Collections.Generic; + using System.Linq; + using System.Web; + using System.Web.Mvc; + + public class HomeController : Controller { + public ActionResult Index() { + Response.AppendHeader( + "X-XRDS-Location", + new Uri(Request.Url, Response.ApplyAppPathModifier("~/Home/xrds")).AbsoluteUri); + return View("Index"); + } + + public ActionResult Xrds() { + return View("Xrds"); + } + } +} diff --git a/samples/RelyingPartyMvc/Controllers/UserController.cs b/samples/RelyingPartyMvc/Controllers/UserController.cs new file mode 100644 index 0000000..c6b8479 --- /dev/null +++ b/samples/RelyingPartyMvc/Controllers/UserController.cs @@ -0,0 +1,60 @@ +namespace RelyingPartyMvc.Controllers { + using System; + using System.Collections.Generic; + using System.Linq; + using System.Web; + using System.Web.Mvc; + using System.Web.Security; + using DotNetOpenAuth.OpenId; + using DotNetOpenAuth.OpenId.RelyingParty; + + public class UserController : Controller { + public ActionResult Index() { + if (!User.Identity.IsAuthenticated) { + Response.Redirect("/User/Login?ReturnUrl=Index"); + } + + return View("Index"); + } + + public ActionResult Logout() { + FormsAuthentication.SignOut(); + return Redirect("/Home"); + } + + public ActionResult Login() { + // Stage 1: display login form to user + return View("Login"); + } + + public ActionResult Authenticate() { + var openid = new OpenIdRelyingParty(); + var response = openid.GetResponse(); + if (response == null) { + // Stage 2: user submitting Identifier + Identifier id; + if (Identifier.TryParse(Request.Form["openid_identifier"], out id)) { + openid.CreateRequest(Request.Form["openid_identifier"]).RedirectToProvider(); + } else { + ViewData["Message"] = "Invalid identifier"; + return View("Login"); + } + } else { + // Stage 3: OpenID Provider sending assertion response + switch (response.Status) { + case AuthenticationStatus.Authenticated: + Session["FriendlyIdentifier"] = response.FriendlyIdentifierForDisplay; + FormsAuthentication.RedirectFromLoginPage(response.ClaimedIdentifier, false); + break; + case AuthenticationStatus.Canceled: + ViewData["Message"] = "Canceled at provider"; + return View("Login"); + case AuthenticationStatus.Failed: + ViewData["Message"] = response.Exception.Message; + return View("Login"); + } + } + return new EmptyResult(); + } + } +} diff --git a/samples/RelyingPartyMvc/Default.aspx b/samples/RelyingPartyMvc/Default.aspx new file mode 100644 index 0000000..b570fd8 --- /dev/null +++ b/samples/RelyingPartyMvc/Default.aspx @@ -0,0 +1,9 @@ +<%@ Page Language="C#" AutoEventWireup="true" %> + +<script runat="server"> + protected void Page_Load(object sender, EventArgs e) { + Response.Redirect("~/Home/Index"); + } +</script> + +<!-- Please do not delete this file. It is used to ensure that ASP.NET MVC is activated by IIS when a user makes a "/" request to the server. --> diff --git a/samples/RelyingPartyMvc/Global.asax b/samples/RelyingPartyMvc/Global.asax new file mode 100644 index 0000000..bc13a45 --- /dev/null +++ b/samples/RelyingPartyMvc/Global.asax @@ -0,0 +1 @@ +<%@ Application Codebehind="Global.asax.cs" Inherits="RelyingPartyMvc.MvcApplication" Language="C#" %> diff --git a/samples/RelyingPartyMvc/Global.asax.cs b/samples/RelyingPartyMvc/Global.asax.cs new file mode 100644 index 0000000..4015d71 --- /dev/null +++ b/samples/RelyingPartyMvc/Global.asax.cs @@ -0,0 +1,26 @@ +namespace RelyingPartyMvc { + using System; + using System.Collections.Generic; + using System.Linq; + using System.Web; + using System.Web.Mvc; + using System.Web.Routing; + + //// Note: For instructions on enabling IIS6 or IIS7 classic mode, + //// visit http://go.microsoft.com/?LinkId=9394801 + + public class MvcApplication : System.Web.HttpApplication { + public static void RegisterRoutes(RouteCollection routes) { + routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); + + routes.MapRoute( + "Default", // Route name + "{controller}/{action}/{id}", // URL with parameters + new { controller = "Home", action = "Index", id = string.Empty }); // Parameter defaults + } + + protected void Application_Start(object sender, EventArgs e) { + RegisterRoutes(RouteTable.Routes); + } + } +}
\ No newline at end of file diff --git a/samples/RelyingPartyMvc/Properties/AssemblyInfo.cs b/samples/RelyingPartyMvc/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..c0ec42d --- /dev/null +++ b/samples/RelyingPartyMvc/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("RelyingPartyMvc")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("RelyingPartyMvc")] +[assembly: AssemblyCopyright("Copyright © 2008")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("43c1645b-2968-4d5d-8828-5994e0b960ff")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/samples/RelyingPartyMvc/RelyingPartyMvc.csproj b/samples/RelyingPartyMvc/RelyingPartyMvc.csproj new file mode 100644 index 0000000..7d6bab4 --- /dev/null +++ b/samples/RelyingPartyMvc/RelyingPartyMvc.csproj @@ -0,0 +1,130 @@ +<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <PropertyGroup> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <ProductVersion>9.0.30729</ProductVersion> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{07B193F1-68AD-4E9C-98AF-BEFB5E9403CB}</ProjectGuid> + <ProjectTypeGuids>{603c0e0b-db56-11dc-be95-000d561079b0};{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids> + <OutputType>Library</OutputType> + <AppDesignerFolder>Properties</AppDesignerFolder> + <RootNamespace>RelyingPartyMvc</RootNamespace> + <AssemblyName>RelyingPartyMvc</AssemblyName> + <TargetFrameworkVersion>v3.5</TargetFrameworkVersion> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> + <DebugSymbols>true</DebugSymbols> + <DebugType>full</DebugType> + <Optimize>false</Optimize> + <OutputPath>bin\</OutputPath> + <DefineConstants>DEBUG;TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> + <DebugType>pdbonly</DebugType> + <Optimize>true</Optimize> + <OutputPath>bin\</OutputPath> + <DefineConstants>TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + </PropertyGroup> + <ItemGroup> + <Reference Include="System" /> + <Reference Include="System.Data" /> + <Reference Include="System.Core"> + <RequiredTargetFramework>3.5</RequiredTargetFramework> + </Reference> + <Reference Include="System.Data.DataSetExtensions"> + <RequiredTargetFramework>3.5</RequiredTargetFramework> + </Reference> + <Reference Include="System.Web.Abstractions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> + <SpecificVersion>False</SpecificVersion> + <HintPath>..\..\lib\System.Web.Abstractions.dll</HintPath> + </Reference> + <Reference Include="System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> + <SpecificVersion>False</SpecificVersion> + <HintPath>..\..\lib\System.Web.Mvc.dll</HintPath> + </Reference> + <Reference Include="System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL"> + <SpecificVersion>False</SpecificVersion> + <HintPath>..\..\lib\System.Web.Routing.dll</HintPath> + </Reference> + <Reference Include="System.Xml.Linq"> + <RequiredTargetFramework>3.5</RequiredTargetFramework> + </Reference> + <Reference Include="System.Drawing" /> + <Reference Include="System.Web" /> + <Reference Include="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" /> + <Reference Include="System.Xml" /> + <Reference Include="System.Configuration" /> + <Reference Include="System.Web.Services" /> + <Reference Include="System.EnterpriseServices" /> + <Reference Include="System.Web.Mobile" /> + </ItemGroup> + <ItemGroup> + <Compile Include="Controllers\HomeController.cs" /> + <Compile Include="Controllers\UserController.cs" /> + <Compile Include="Global.asax.cs"> + <DependentUpon>Global.asax</DependentUpon> + </Compile> + <Compile Include="Properties\AssemblyInfo.cs" /> + <Compile Include="Views\Shared\Site.Master.cs"> + <DependentUpon>Site.Master</DependentUpon> + <SubType>ASPXCodeBehind</SubType> + </Compile> + <Compile Include="Views\Shared\Site.Master.designer.cs"> + <DependentUpon>Site.Master</DependentUpon> + </Compile> + </ItemGroup> + <ItemGroup> + <Content Include="Default.aspx" /> + <Content Include="Global.asax" /> + <Content Include="Views\User\Index.aspx" /> + <Content Include="Views\User\Login.aspx" /> + <Content Include="Web.config" /> + <Content Include="Content\Site.css" /> + <Content Include="Views\Home\Index.aspx" /> + <Content Include="Views\Shared\Site.Master" /> + <Content Include="Views\Web.config" /> + <Content Include="Views\Home\xrds.aspx" /> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="..\..\src\DotNetOpenAuth\DotNetOpenAuth.csproj"> + <Project>{3191B653-F76D-4C1A-9A5A-347BC3AAAAB7}</Project> + <Name>DotNetOpenAuth</Name> + </ProjectReference> + </ItemGroup> + <ItemGroup> + <Folder Include="App_Data\" /> + <Folder Include="Models\" /> + </ItemGroup> + <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> + <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v9.0\WebApplications\Microsoft.WebApplication.targets" /> + <!-- To modify your build process, add your task inside one of the targets below and uncomment it. + Other similar extension points exist, see Microsoft.Common.targets. + <Target Name="BeforeBuild"> + </Target> + <Target Name="AfterBuild"> + </Target> + --> + <ProjectExtensions> + <VisualStudio> + <FlavorProperties GUID="{349c5851-65df-11da-9384-00065b846f21}"> + <WebProjectProperties> + <UseIIS>False</UseIIS> + <AutoAssignPort>True</AutoAssignPort> + <DevelopmentServerPort>54347</DevelopmentServerPort> + <DevelopmentServerVPath>/</DevelopmentServerVPath> + <IISUrl> + </IISUrl> + <NTLMAuthentication>False</NTLMAuthentication> + <UseCustomServer>False</UseCustomServer> + <CustomServerUrl> + </CustomServerUrl> + <SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile> + </WebProjectProperties> + </FlavorProperties> + </VisualStudio> + </ProjectExtensions> +</Project>
\ No newline at end of file diff --git a/samples/RelyingPartyMvc/Views/Home/Index.aspx b/samples/RelyingPartyMvc/Views/Home/Index.aspx new file mode 100644 index 0000000..0cd7595 --- /dev/null +++ b/samples/RelyingPartyMvc/Views/Home/Index.aspx @@ -0,0 +1,15 @@ +<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %> + +<asp:Content ID="indexContent" ContentPlaceHolderID="MainContentPlaceHolder" runat="server"> + <h1>OpenID Relying Party </h1> + <h2>Provided by <a href="http://dotnetopenid.googlecode.com">DotNetOpenId</a> </h2> + <% if (User.Identity.IsAuthenticated) { %> + <p><b>You are already logged in!</b> Try visiting the + <%=Html.ActionLink("Members Only", "Index", "User") %> + area. </p> + <% } else { %> + <p>Visit the + <%=Html.ActionLink("Members Only", "Index", "User") %> + area to trigger a login. </p> + <% } %> +</asp:Content> diff --git a/samples/RelyingPartyMvc/Views/Home/xrds.aspx b/samples/RelyingPartyMvc/Views/Home/xrds.aspx new file mode 100644 index 0000000..583c77c --- /dev/null +++ b/samples/RelyingPartyMvc/Views/Home/xrds.aspx @@ -0,0 +1,22 @@ +<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" ContentType="application/xrds+xml" %><?xml version="1.0" encoding="UTF-8"?> +<%-- +This page is a required for relying party discovery per OpenID 2.0. +It allows Providers to call back to the relying party site to confirm the +identity that it is claiming in the realm and return_to URLs. +This page should be pointed to by the 'realm' home page, which in this sample +is default.aspx. +--%> +<xrds:XRDS + xmlns:xrds="xri://$xrds" + xmlns:openid="http://openid.net/xmlns/1.0" + xmlns="xri://$xrd*($v*2.0)"> + <XRD> + <Service priority="1"> + <Type>http://specs.openid.net/auth/2.0/return_to</Type> + <%-- Every page with an OpenID login should be listed here. --%> + <%-- We use the Authenticate action instead of Login because Authenticate + is the action that receives OpenId assertions. --%> + <URI><%=new Uri(Request.Url, Response.ApplyAppPathModifier("~/user/authenticate"))%></URI> + </Service> + </XRD> +</xrds:XRDS> diff --git a/samples/RelyingPartyMvc/Views/Shared/Site.Master b/samples/RelyingPartyMvc/Views/Shared/Site.Master new file mode 100644 index 0000000..a8124f9 --- /dev/null +++ b/samples/RelyingPartyMvc/Views/Shared/Site.Master @@ -0,0 +1,51 @@ +<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Site.master.cs" Inherits="RelyingPartyMvc.Views.Shared.Site" %> + +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head runat="server"> + <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> + <title>DotNetOpenId ASP.NET MVC Login sample</title> + <link href="../../Content/Site.css" rel="stylesheet" type="text/css" /> +</head> +<body> + <div class="page"> + <div id="header"> + <p id="logo"><a href="">DotNetOpenId ASP.NET MVC Login sample</a></p> + <ul id="mainMenu"> + <li> + <%= Html.ActionLink("Home", "Index", "Home")%> + </li> + <li> + <%= Html.ActionLink("Member Area", "Index", "User")%> + </li> + </ul> + </div> + <div id="mainContent"> + <div class="columnsContainer"> + <div class="leftColumn"> + <h2>External OpenID Links</h2> + <ul> + <li><a href="http://dotnetopenid.googlecode.com">DotNetOpenId</a></li> + <li><a href="http://openid.net">About OpenID</a></li> + </ul> + </div> + <!--/leftColumn--> + <div class="rightColumn"> + <asp:ContentPlaceHolder ID="MainContentPlaceHolder" runat="server"> + </asp:ContentPlaceHolder> + </div> + <!--/rightColumn--> + <div class="clear"> + </div> + </div> + <!--/columnsContainer--> + <div id="footer"> + <p>Andrew Arnott © Copyright 2009 </p> + </div> + <!--/footer--> + </div> + <!--/mainContent--> + </div> + <!--/page--> +</body> +</html> diff --git a/samples/RelyingPartyMvc/Views/Shared/Site.Master.cs b/samples/RelyingPartyMvc/Views/Shared/Site.Master.cs new file mode 100644 index 0000000..c844657 --- /dev/null +++ b/samples/RelyingPartyMvc/Views/Shared/Site.Master.cs @@ -0,0 +1,4 @@ +namespace RelyingPartyMvc.Views.Shared { + public partial class Site : System.Web.Mvc.ViewMasterPage { + } +} diff --git a/samples/RelyingPartyMvc/Views/Shared/Site.Master.designer.cs b/samples/RelyingPartyMvc/Views/Shared/Site.Master.designer.cs new file mode 100644 index 0000000..005aaa7 --- /dev/null +++ b/samples/RelyingPartyMvc/Views/Shared/Site.Master.designer.cs @@ -0,0 +1,25 @@ +//------------------------------------------------------------------------------ +// <auto-generated> +// This code was generated by a tool. +// Runtime Version:2.0.50727.3521 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// </auto-generated> +//------------------------------------------------------------------------------ + +namespace RelyingPartyMvc.Views.Shared { + + + public partial class Site { + + /// <summary> + /// MainContentPlaceHolder control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.ContentPlaceHolder MainContentPlaceHolder; + } +} diff --git a/samples/RelyingPartyMvc/Views/User/Index.aspx b/samples/RelyingPartyMvc/Views/User/Index.aspx new file mode 100644 index 0000000..4d9a9e2 --- /dev/null +++ b/samples/RelyingPartyMvc/Views/User/Index.aspx @@ -0,0 +1,12 @@ +<%@ Page Title="OpenID Relying Party, by DotNetOpenId" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" + Inherits="System.Web.Mvc.ViewPage" %> + +<asp:Content ID="Content1" ContentPlaceHolderID="MainContentPlaceHolder" runat="server"> + <h1>Members Only Area </h1> + <p>Congratulations, <b> + <%=Session["FriendlyIdentifier"] %></b>. You have completed the OpenID login process. + </p> + <p> + <%=Html.ActionLink("Logout", "logout") %> + </p> +</asp:Content> diff --git a/samples/RelyingPartyMvc/Views/User/Login.aspx b/samples/RelyingPartyMvc/Views/User/Login.aspx new file mode 100644 index 0000000..24f9f56 --- /dev/null +++ b/samples/RelyingPartyMvc/Views/User/Login.aspx @@ -0,0 +1,20 @@ +<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %> + +<asp:Content ID="Content1" ContentPlaceHolderID="MainContentPlaceHolder" runat="server"> + <% if (ViewData["Message"] != null) { %> + <div style="border: solid 1px red"> + <%= Html.Encode(ViewData["Message"].ToString())%> + </div> + <% } %> + <p>You must log in before entering the Members Area: </p> + <form action="Authenticate?ReturnUrl=<%=HttpUtility.UrlEncode(Request.QueryString["ReturnUrl"]) %>" method="post"> + <label for="openid_identifier">OpenID: </label> + <input id="openid_identifier" name="openid_identifier" size="40" /> + <input type="submit" value="Login" /> + </form> + + <script type="text/javascript"> + document.getElementById("openid_identifier").focus(); + </script> + +</asp:Content> diff --git a/samples/RelyingPartyMvc/Views/Web.config b/samples/RelyingPartyMvc/Views/Web.config new file mode 100644 index 0000000..e67c0eb --- /dev/null +++ b/samples/RelyingPartyMvc/Views/Web.config @@ -0,0 +1,20 @@ +<?xml version="1.0"?> +<configuration> + <system.web> + <httpHandlers> + <remove verb="*" path="*.aspx"/> + <add path="*.aspx" verb="*" + type="System.Web.HttpNotFoundHandler"/> + </httpHandlers> + </system.web> + + <system.webServer> + <validation validateIntegratedModeConfiguration="false"/> + <handlers> + <remove name="PageHandlerFactory-ISAPI-2.0"/> + <remove name="PageHandlerFactory-ISAPI-1.1"/> + <remove name="PageHandlerFactory-Integrated"/> + <add name="BlockViewHandler" path="*.aspx" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler"/> + </handlers> + </system.webServer> +</configuration> diff --git a/samples/RelyingPartyMvc/Web.config b/samples/RelyingPartyMvc/Web.config new file mode 100644 index 0000000..02eb8c2 --- /dev/null +++ b/samples/RelyingPartyMvc/Web.config @@ -0,0 +1,156 @@ +<?xml version="1.0"?> +<!-- + Note: As an alternative to hand editing this file you can use the + web admin tool to configure settings for your application. Use + the Website->Asp.Net Configuration option in Visual Studio. + A full list of settings and comments can be found in + machine.config.comments usually located in + \Windows\Microsoft.Net\Framework\v2.x\Config +--> +<configuration> + <configSections> + <section name="uri" type="System.Configuration.UriSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> + <section name="dotNetOpenAuth" type="DotNetOpenAuth.Configuration.DotNetOpenAuthSection" requirePermission="false" allowLocation="true"/> + <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> + <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> + <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/> + <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"> + <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="Everywhere"/> + <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/> + <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/> + <section name="roleService" type="System.Web.Configuration.ScriptingRoleServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" allowDefinition="MachineToApplication"/> + </sectionGroup> + </sectionGroup> + </sectionGroup> + </configSections> + + <!-- this is an optional configuration section where aspects of dotnetopenauth can be customized --> + <dotNetOpenAuth> + <openid> + <relyingParty> + <security requireSsl="false" /> + </relyingParty> + </openid> + <messaging> + <untrustedWebRequest> + <whitelistHosts> + <!-- since this is a sample, and will often be used with localhost --> + <add name="localhost" /> + </whitelistHosts> + </untrustedWebRequest> + </messaging> + </dotNetOpenAuth> + + <!-- The uri section is necessary to turn on .NET 3.5 support for IDN (international domain names), + which is necessary for OpenID urls with unicode characters in the domain/host name. --> + <uri> + <idn enabled="All" /> + <iriParsing enabled="true" /> + </uri> + + <appSettings/> + <connectionStrings/> + <system.web> + <!-- + Set compilation debug="true" to insert debugging + symbols into the compiled page. Because this + affects performance, set this value to true only + during development. + --> + <compilation debug="true"> + <assemblies> + <add assembly="System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/> + <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> + <add assembly="System.Web.Abstractions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> + <add assembly="System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> + <add assembly="System.Web.Mvc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> + <add assembly="System.Data.DataSetExtensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/> + <add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/> + <add assembly="System.Data.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/> + </assemblies> + </compilation> + <!-- + The <authentication> section enables configuration + of the security authentication mode used by + ASP.NET to identify an incoming user. + --> + <authentication mode="Forms"> + <forms defaultUrl="/Home" loginUrl="/User/Login"/> + </authentication> + <!-- + The <customErrors> section enables configuration + of what to do if/when an unhandled error occurs + during the execution of a request. Specifically, + it enables developers to configure html error pages + to be displayed in place of a error stack trace. + + <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm"> + <error statusCode="403" redirect="NoAccess.htm" /> + <error statusCode="404" redirect="FileNotFound.htm" /> + </customErrors> + --> + <pages> + <controls> + <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> + <add tagPrefix="asp" namespace="System.Web.UI.WebControls" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> + </controls> + <namespaces> + <add namespace="System.Web.Mvc"/> + <add namespace="System.Web.Mvc.Ajax"/> + <add namespace="System.Web.Mvc.Html"/> + <add namespace="System.Web.Routing"/> + <add namespace="System.Linq"/> + <add namespace="System.Collections.Generic"/> + </namespaces> + </pages> + <httpHandlers> + <remove verb="*" path="*.asmx"/> + <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> + <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> + <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/> + </httpHandlers> + <httpModules> + <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> + <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> + </httpModules> + </system.web> + <system.codedom> + <compilers> + <compiler language="c#;cs;csharp" extension=".cs" warningLevel="4" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> + <providerOption name="CompilerVersion" value="v3.5"/> + <providerOption name="WarnAsError" value="false"/> + </compiler> + <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" warningLevel="4" type="Microsoft.VisualBasic.VBCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> + <providerOption name="CompilerVersion" value="v3.5"/> + <providerOption name="OptionInfer" value="true"/> + <providerOption name="WarnAsError" value="false"/> + </compiler> + </compilers> + </system.codedom> + <system.web.extensions/> + <!-- + The system.webServer section is required for running ASP.NET AJAX under Internet + Information Services 7.0. It is not necessary for previous version of IIS. + --> + <system.webServer> + <validation validateIntegratedModeConfiguration="false"/> + <modules runAllManagedModulesForAllRequests="true"> + <remove name="ScriptModule"/> + <remove name="UrlRoutingModule"/> + <add name="ScriptModule" preCondition="managedHandler" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> + <add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> + </modules> + <handlers> + <remove name="WebServiceHandlerFactory-Integrated"/> + <remove name="ScriptHandlerFactory"/> + <remove name="ScriptHandlerFactoryAppServices"/> + <remove name="ScriptResource"/> + <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> + <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> + <add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> + <add name="MvcScriptMap" preCondition="classicMode,bitness32" verb="*" path="*.mvc" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll"/> + <add name="MvcScriptMap64" preCondition="classicMode,bitness64" verb="*" path="*.mvc" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_isapi.dll"/> + <add name="UrlRoutingHandler" preCondition="integratedMode" verb="*" path="UrlRouting.axd" type="System.Web.Routing.UrlRoutingHandler, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> + </handlers> + </system.webServer> +</configuration> diff --git a/samples/RelyingPartyWebForms/.gitignore b/samples/RelyingPartyWebForms/.gitignore new file mode 100644 index 0000000..b086a60 --- /dev/null +++ b/samples/RelyingPartyWebForms/.gitignore @@ -0,0 +1,5 @@ +Bin +obj +*.user +*.log +StyleCop.Cache diff --git a/samples/RelyingPartyWebForms/Code/CustomStore.cs b/samples/RelyingPartyWebForms/Code/CustomStore.cs new file mode 100644 index 0000000..b250919 --- /dev/null +++ b/samples/RelyingPartyWebForms/Code/CustomStore.cs @@ -0,0 +1,137 @@ +namespace RelyingPartyWebForms.Code { + using System; + using System.Data; + using System.Globalization; + using System.Security.Cryptography; + using DotNetOpenAuth.OpenId; + using DotNetOpenAuth.OpenId.RelyingParty; + + /// <summary> + /// This custom store serializes all elements to demonstrate peristent and/or shared storage. + /// This is common in a web farm, for example. + /// </summary> + /// <remarks> + /// This doesn't actually serialize anything to a persistent store, so restarting the web server + /// will still clear everything this store is supposed to remember. + /// But we "persist" all associations and nonces into a DataTable to demonstrate + /// that using a database is possible. + /// </remarks> + public class CustomStore : IRelyingPartyApplicationStore { + private static CustomStoreDataSet dataSet = new CustomStoreDataSet(); + + #region IPrivateSecretStore Members + + /// <summary> + /// Gets or sets a secret key that can be used for signing. + /// </summary> + /// <value>A 64-byte binary value, which may contain null bytes.</value> + public byte[] PrivateSecret { get; set; } + + #endregion + + #region INonceStore Members + + /// <summary> + /// Stores a given nonce and timestamp. + /// </summary> + /// <param name="nonce">A series of random characters.</param> + /// <param name="timestamp">The timestamp that together with the nonce string make it unique. + /// The timestamp may also be used by the data store to clear out old nonces.</param> + /// <returns> + /// True if the nonce+timestamp (combination) was not previously in the database. + /// False if the nonce was stored previously with the same timestamp. + /// </returns> + /// <remarks> + /// The nonce must be stored for no less than the maximum time window a message may + /// be processed within before being discarded as an expired message. + /// If the binding element is applicable to your channel, this expiration window + /// is retrieved or set using the + /// <see cref="StandardExpirationBindingElement.MaximumMessageAge"/> property. + /// </remarks> + public bool StoreNonce(string nonce, DateTime timestamp) { + // IMPORTANT: If actually persisting to a database that can be reached from + // different servers/instances of this class at once, it is vitally important + // to protect against race condition attacks by one or more of these: + // 1) setting a UNIQUE constraint on the nonce CODE in the SQL table + // 2) Using a transaction with repeatable reads to guarantee that a check + // that verified a nonce did not exist will prevent that nonce from being + // added by another process while this process is adding it. + // And then you'll want to catch the exception that the SQL database can throw + // at you in the result of a race condition somewhere in your web site UI code + // and display some message to have the user try to log in again, and possibly + // warn them about a replay attack. + lock (this) { + if (dataSet.Nonce.FindByCode(nonce) != null) { + return false; + } + + // TODO: calculate the actual expiration date. + dataSet.Nonce.AddNonceRow(nonce, timestamp.ToLocalTime(), (timestamp + TimeSpan.FromHours(1)).ToLocalTime()); + return true; + } + } + + public void ClearExpiredNonces() { + this.removeExpiredRows(dataSet.Nonce, dataSet.Nonce.ExpiresColumn.ColumnName); + } + + #endregion + + #region IAssociationStore<Uri> Members + + public void StoreAssociation(Uri distinguishingFactor, Association assoc) { + var assocRow = dataSet.Association.NewAssociationRow(); + assocRow.DistinguishingFactor = distinguishingFactor.AbsoluteUri; + assocRow.Handle = assoc.Handle; + assocRow.Expires = assoc.Expires.ToLocalTime(); + assocRow.PrivateData = assoc.SerializePrivateData(); + dataSet.Association.AddAssociationRow(assocRow); + } + + public Association GetAssociation(Uri distinguishingFactor) { + // properly escape the URL to prevent injection attacks. + string value = distinguishingFactor.AbsoluteUri.Replace("'", "''"); + string filter = string.Format( + CultureInfo.InvariantCulture, + "{0} = '{1}'", + dataSet.Association.DistinguishingFactorColumn.ColumnName, + value); + string sort = dataSet.Association.ExpiresColumn.ColumnName + " DESC"; + DataView view = new DataView(dataSet.Association, filter, sort, DataViewRowState.CurrentRows); + if (view.Count == 0) { + return null; + } + var row = (CustomStoreDataSet.AssociationRow)view[0].Row; + return Association.Deserialize(row.Handle, row.Expires.ToUniversalTime(), row.PrivateData); + } + + public Association GetAssociation(Uri distinguishingFactor, string handle) { + var assocRow = dataSet.Association.FindByDistinguishingFactorHandle(distinguishingFactor.AbsoluteUri, handle); + return Association.Deserialize(assocRow.Handle, assocRow.Expires, assocRow.PrivateData); + } + + public bool RemoveAssociation(Uri distinguishingFactor, string handle) { + var row = dataSet.Association.FindByDistinguishingFactorHandle(distinguishingFactor.AbsoluteUri, handle); + if (row != null) { + dataSet.Association.RemoveAssociationRow(row); + return true; + } else { + return false; + } + } + + public void ClearExpiredAssociations() { + this.removeExpiredRows(dataSet.Association, dataSet.Association.ExpiresColumn.ColumnName); + } + + #endregion + + private void removeExpiredRows(DataTable table, string expiredColumnName) { + string filter = string.Format(CultureInfo.InvariantCulture, "{0} < #{1}#", expiredColumnName, DateTime.Now); + DataView view = new DataView(table, filter, null, DataViewRowState.CurrentRows); + for (int i = view.Count - 1; i >= 0; i--) { + view.Delete(i); + } + } + } +} diff --git a/samples/RelyingPartyWebForms/Code/CustomStoreDataSet.Designer.cs b/samples/RelyingPartyWebForms/Code/CustomStoreDataSet.Designer.cs new file mode 100644 index 0000000..a0ffef0 --- /dev/null +++ b/samples/RelyingPartyWebForms/Code/CustomStoreDataSet.Designer.cs @@ -0,0 +1,976 @@ +//------------------------------------------------------------------------------ +// <auto-generated> +// This code was generated by a tool. +// Runtime Version:2.0.50727.3053 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// </auto-generated> +//------------------------------------------------------------------------------ + +#pragma warning disable 1591 + +namespace RelyingPartyWebForms { + + + /// <summary> + ///Represents a strongly typed in-memory cache of data. + ///</summary> + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")] + [global::System.Serializable()] + [global::System.ComponentModel.DesignerCategoryAttribute("code")] + [global::System.ComponentModel.ToolboxItem(true)] + [global::System.Xml.Serialization.XmlSchemaProviderAttribute("GetTypedDataSetSchema")] + [global::System.Xml.Serialization.XmlRootAttribute("CustomStoreDataSet")] + [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.DataSet")] + public partial class CustomStoreDataSet : global::System.Data.DataSet { + + private AssociationDataTable tableAssociation; + + private NonceDataTable tableNonce; + + private global::System.Data.SchemaSerializationMode _schemaSerializationMode = global::System.Data.SchemaSerializationMode.IncludeSchema; + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public CustomStoreDataSet() { + this.BeginInit(); + this.InitClass(); + global::System.ComponentModel.CollectionChangeEventHandler schemaChangedHandler = new global::System.ComponentModel.CollectionChangeEventHandler(this.SchemaChanged); + base.Tables.CollectionChanged += schemaChangedHandler; + base.Relations.CollectionChanged += schemaChangedHandler; + this.EndInit(); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected CustomStoreDataSet(global::System.Runtime.Serialization.SerializationInfo info, global::System.Runtime.Serialization.StreamingContext context) : + base(info, context, false) { + if ((this.IsBinarySerialized(info, context) == true)) { + this.InitVars(false); + global::System.ComponentModel.CollectionChangeEventHandler schemaChangedHandler1 = new global::System.ComponentModel.CollectionChangeEventHandler(this.SchemaChanged); + this.Tables.CollectionChanged += schemaChangedHandler1; + this.Relations.CollectionChanged += schemaChangedHandler1; + return; + } + string strSchema = ((string)(info.GetValue("XmlSchema", typeof(string)))); + if ((this.DetermineSchemaSerializationMode(info, context) == global::System.Data.SchemaSerializationMode.IncludeSchema)) { + global::System.Data.DataSet ds = new global::System.Data.DataSet(); + ds.ReadXmlSchema(new global::System.Xml.XmlTextReader(new global::System.IO.StringReader(strSchema))); + if ((ds.Tables["Association"] != null)) { + base.Tables.Add(new AssociationDataTable(ds.Tables["Association"])); + } + if ((ds.Tables["Nonce"] != null)) { + base.Tables.Add(new NonceDataTable(ds.Tables["Nonce"])); + } + this.DataSetName = ds.DataSetName; + this.Prefix = ds.Prefix; + this.Namespace = ds.Namespace; + this.Locale = ds.Locale; + this.CaseSensitive = ds.CaseSensitive; + this.EnforceConstraints = ds.EnforceConstraints; + this.Merge(ds, false, global::System.Data.MissingSchemaAction.Add); + this.InitVars(); + } + else { + this.ReadXmlSchema(new global::System.Xml.XmlTextReader(new global::System.IO.StringReader(strSchema))); + } + this.GetSerializationData(info, context); + global::System.ComponentModel.CollectionChangeEventHandler schemaChangedHandler = new global::System.ComponentModel.CollectionChangeEventHandler(this.SchemaChanged); + base.Tables.CollectionChanged += schemaChangedHandler; + this.Relations.CollectionChanged += schemaChangedHandler; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.ComponentModel.Browsable(false)] + [global::System.ComponentModel.DesignerSerializationVisibility(global::System.ComponentModel.DesignerSerializationVisibility.Content)] + public AssociationDataTable Association { + get { + return this.tableAssociation; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.ComponentModel.Browsable(false)] + [global::System.ComponentModel.DesignerSerializationVisibility(global::System.ComponentModel.DesignerSerializationVisibility.Content)] + public NonceDataTable Nonce { + get { + return this.tableNonce; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.ComponentModel.BrowsableAttribute(true)] + [global::System.ComponentModel.DesignerSerializationVisibilityAttribute(global::System.ComponentModel.DesignerSerializationVisibility.Visible)] + public override global::System.Data.SchemaSerializationMode SchemaSerializationMode { + get { + return this._schemaSerializationMode; + } + set { + this._schemaSerializationMode = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.ComponentModel.DesignerSerializationVisibilityAttribute(global::System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public new global::System.Data.DataTableCollection Tables { + get { + return base.Tables; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.ComponentModel.DesignerSerializationVisibilityAttribute(global::System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public new global::System.Data.DataRelationCollection Relations { + get { + return base.Relations; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override void InitializeDerivedDataSet() { + this.BeginInit(); + this.InitClass(); + this.EndInit(); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public override global::System.Data.DataSet Clone() { + CustomStoreDataSet cln = ((CustomStoreDataSet)(base.Clone())); + cln.InitVars(); + cln.SchemaSerializationMode = this.SchemaSerializationMode; + return cln; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override bool ShouldSerializeTables() { + return false; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override bool ShouldSerializeRelations() { + return false; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override void ReadXmlSerializable(global::System.Xml.XmlReader reader) { + if ((this.DetermineSchemaSerializationMode(reader) == global::System.Data.SchemaSerializationMode.IncludeSchema)) { + this.Reset(); + global::System.Data.DataSet ds = new global::System.Data.DataSet(); + ds.ReadXml(reader); + if ((ds.Tables["Association"] != null)) { + base.Tables.Add(new AssociationDataTable(ds.Tables["Association"])); + } + if ((ds.Tables["Nonce"] != null)) { + base.Tables.Add(new NonceDataTable(ds.Tables["Nonce"])); + } + this.DataSetName = ds.DataSetName; + this.Prefix = ds.Prefix; + this.Namespace = ds.Namespace; + this.Locale = ds.Locale; + this.CaseSensitive = ds.CaseSensitive; + this.EnforceConstraints = ds.EnforceConstraints; + this.Merge(ds, false, global::System.Data.MissingSchemaAction.Add); + this.InitVars(); + } + else { + this.ReadXml(reader); + this.InitVars(); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override global::System.Xml.Schema.XmlSchema GetSchemaSerializable() { + global::System.IO.MemoryStream stream = new global::System.IO.MemoryStream(); + this.WriteXmlSchema(new global::System.Xml.XmlTextWriter(stream, null)); + stream.Position = 0; + return global::System.Xml.Schema.XmlSchema.Read(new global::System.Xml.XmlTextReader(stream), null); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + internal void InitVars() { + this.InitVars(true); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + internal void InitVars(bool initTable) { + this.tableAssociation = ((AssociationDataTable)(base.Tables["Association"])); + if ((initTable == true)) { + if ((this.tableAssociation != null)) { + this.tableAssociation.InitVars(); + } + } + this.tableNonce = ((NonceDataTable)(base.Tables["Nonce"])); + if ((initTable == true)) { + if ((this.tableNonce != null)) { + this.tableNonce.InitVars(); + } + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + private void InitClass() { + this.DataSetName = "CustomStoreDataSet"; + this.Prefix = ""; + this.Namespace = "http://tempuri.org/CustomStoreDataSet.xsd"; + this.EnforceConstraints = true; + this.SchemaSerializationMode = global::System.Data.SchemaSerializationMode.IncludeSchema; + this.tableAssociation = new AssociationDataTable(); + base.Tables.Add(this.tableAssociation); + this.tableNonce = new NonceDataTable(); + base.Tables.Add(this.tableNonce); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + private bool ShouldSerializeAssociation() { + return false; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + private bool ShouldSerializeNonce() { + return false; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + private void SchemaChanged(object sender, global::System.ComponentModel.CollectionChangeEventArgs e) { + if ((e.Action == global::System.ComponentModel.CollectionChangeAction.Remove)) { + this.InitVars(); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public static global::System.Xml.Schema.XmlSchemaComplexType GetTypedDataSetSchema(global::System.Xml.Schema.XmlSchemaSet xs) { + CustomStoreDataSet ds = new CustomStoreDataSet(); + global::System.Xml.Schema.XmlSchemaComplexType type = new global::System.Xml.Schema.XmlSchemaComplexType(); + global::System.Xml.Schema.XmlSchemaSequence sequence = new global::System.Xml.Schema.XmlSchemaSequence(); + global::System.Xml.Schema.XmlSchemaAny any = new global::System.Xml.Schema.XmlSchemaAny(); + any.Namespace = ds.Namespace; + sequence.Items.Add(any); + type.Particle = sequence; + global::System.Xml.Schema.XmlSchema dsSchema = ds.GetSchemaSerializable(); + if (xs.Contains(dsSchema.TargetNamespace)) { + global::System.IO.MemoryStream s1 = new global::System.IO.MemoryStream(); + global::System.IO.MemoryStream s2 = new global::System.IO.MemoryStream(); + try { + global::System.Xml.Schema.XmlSchema schema = null; + dsSchema.Write(s1); + for (global::System.Collections.IEnumerator schemas = xs.Schemas(dsSchema.TargetNamespace).GetEnumerator(); schemas.MoveNext(); ) { + schema = ((global::System.Xml.Schema.XmlSchema)(schemas.Current)); + s2.SetLength(0); + schema.Write(s2); + if ((s1.Length == s2.Length)) { + s1.Position = 0; + s2.Position = 0; + for (; ((s1.Position != s1.Length) + && (s1.ReadByte() == s2.ReadByte())); ) { + ; + } + if ((s1.Position == s1.Length)) { + return type; + } + } + } + } + finally { + if ((s1 != null)) { + s1.Close(); + } + if ((s2 != null)) { + s2.Close(); + } + } + } + xs.Add(dsSchema); + return type; + } + + public delegate void AssociationRowChangeEventHandler(object sender, AssociationRowChangeEvent e); + + public delegate void NonceRowChangeEventHandler(object sender, NonceRowChangeEvent e); + + /// <summary> + ///Represents the strongly named DataTable class. + ///</summary> + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")] + [global::System.Serializable()] + [global::System.Xml.Serialization.XmlSchemaProviderAttribute("GetTypedTableSchema")] + public partial class AssociationDataTable : global::System.Data.DataTable, global::System.Collections.IEnumerable { + + private global::System.Data.DataColumn columnDistinguishingFactor; + + private global::System.Data.DataColumn columnHandle; + + private global::System.Data.DataColumn columnExpires; + + private global::System.Data.DataColumn columnPrivateData; + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public AssociationDataTable() { + this.TableName = "Association"; + this.BeginInit(); + this.InitClass(); + this.EndInit(); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + internal AssociationDataTable(global::System.Data.DataTable table) { + this.TableName = table.TableName; + if ((table.CaseSensitive != table.DataSet.CaseSensitive)) { + this.CaseSensitive = table.CaseSensitive; + } + if ((table.Locale.ToString() != table.DataSet.Locale.ToString())) { + this.Locale = table.Locale; + } + if ((table.Namespace != table.DataSet.Namespace)) { + this.Namespace = table.Namespace; + } + this.Prefix = table.Prefix; + this.MinimumCapacity = table.MinimumCapacity; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected AssociationDataTable(global::System.Runtime.Serialization.SerializationInfo info, global::System.Runtime.Serialization.StreamingContext context) : + base(info, context) { + this.InitVars(); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public global::System.Data.DataColumn DistinguishingFactorColumn { + get { + return this.columnDistinguishingFactor; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public global::System.Data.DataColumn HandleColumn { + get { + return this.columnHandle; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public global::System.Data.DataColumn ExpiresColumn { + get { + return this.columnExpires; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public global::System.Data.DataColumn PrivateDataColumn { + get { + return this.columnPrivateData; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.ComponentModel.Browsable(false)] + public int Count { + get { + return this.Rows.Count; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public AssociationRow this[int index] { + get { + return ((AssociationRow)(this.Rows[index])); + } + } + + public event AssociationRowChangeEventHandler AssociationRowChanging; + + public event AssociationRowChangeEventHandler AssociationRowChanged; + + public event AssociationRowChangeEventHandler AssociationRowDeleting; + + public event AssociationRowChangeEventHandler AssociationRowDeleted; + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public void AddAssociationRow(AssociationRow row) { + this.Rows.Add(row); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public AssociationRow AddAssociationRow(string DistinguishingFactor, string Handle, System.DateTime Expires, byte[] PrivateData) { + AssociationRow rowAssociationRow = ((AssociationRow)(this.NewRow())); + object[] columnValuesArray = new object[] { + DistinguishingFactor, + Handle, + Expires, + PrivateData}; + rowAssociationRow.ItemArray = columnValuesArray; + this.Rows.Add(rowAssociationRow); + return rowAssociationRow; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public AssociationRow FindByDistinguishingFactorHandle(string DistinguishingFactor, string Handle) { + return ((AssociationRow)(this.Rows.Find(new object[] { + DistinguishingFactor, + Handle}))); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public virtual global::System.Collections.IEnumerator GetEnumerator() { + return this.Rows.GetEnumerator(); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public override global::System.Data.DataTable Clone() { + AssociationDataTable cln = ((AssociationDataTable)(base.Clone())); + cln.InitVars(); + return cln; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override global::System.Data.DataTable CreateInstance() { + return new AssociationDataTable(); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + internal void InitVars() { + this.columnDistinguishingFactor = base.Columns["DistinguishingFactor"]; + this.columnHandle = base.Columns["Handle"]; + this.columnExpires = base.Columns["Expires"]; + this.columnPrivateData = base.Columns["PrivateData"]; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + private void InitClass() { + this.columnDistinguishingFactor = new global::System.Data.DataColumn("DistinguishingFactor", typeof(string), null, global::System.Data.MappingType.Element); + base.Columns.Add(this.columnDistinguishingFactor); + this.columnHandle = new global::System.Data.DataColumn("Handle", typeof(string), null, global::System.Data.MappingType.Element); + base.Columns.Add(this.columnHandle); + this.columnExpires = new global::System.Data.DataColumn("Expires", typeof(global::System.DateTime), null, global::System.Data.MappingType.Element); + base.Columns.Add(this.columnExpires); + this.columnPrivateData = new global::System.Data.DataColumn("PrivateData", typeof(byte[]), null, global::System.Data.MappingType.Element); + base.Columns.Add(this.columnPrivateData); + this.Constraints.Add(new global::System.Data.UniqueConstraint("PrimaryKey", new global::System.Data.DataColumn[] { + this.columnDistinguishingFactor, + this.columnHandle}, true)); + this.columnDistinguishingFactor.AllowDBNull = false; + this.columnHandle.AllowDBNull = false; + this.columnExpires.AllowDBNull = false; + this.columnPrivateData.AllowDBNull = false; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public AssociationRow NewAssociationRow() { + return ((AssociationRow)(this.NewRow())); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override global::System.Data.DataRow NewRowFromBuilder(global::System.Data.DataRowBuilder builder) { + return new AssociationRow(builder); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override global::System.Type GetRowType() { + return typeof(AssociationRow); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override void OnRowChanged(global::System.Data.DataRowChangeEventArgs e) { + base.OnRowChanged(e); + if ((this.AssociationRowChanged != null)) { + this.AssociationRowChanged(this, new AssociationRowChangeEvent(((AssociationRow)(e.Row)), e.Action)); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override void OnRowChanging(global::System.Data.DataRowChangeEventArgs e) { + base.OnRowChanging(e); + if ((this.AssociationRowChanging != null)) { + this.AssociationRowChanging(this, new AssociationRowChangeEvent(((AssociationRow)(e.Row)), e.Action)); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override void OnRowDeleted(global::System.Data.DataRowChangeEventArgs e) { + base.OnRowDeleted(e); + if ((this.AssociationRowDeleted != null)) { + this.AssociationRowDeleted(this, new AssociationRowChangeEvent(((AssociationRow)(e.Row)), e.Action)); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override void OnRowDeleting(global::System.Data.DataRowChangeEventArgs e) { + base.OnRowDeleting(e); + if ((this.AssociationRowDeleting != null)) { + this.AssociationRowDeleting(this, new AssociationRowChangeEvent(((AssociationRow)(e.Row)), e.Action)); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public void RemoveAssociationRow(AssociationRow row) { + this.Rows.Remove(row); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public static global::System.Xml.Schema.XmlSchemaComplexType GetTypedTableSchema(global::System.Xml.Schema.XmlSchemaSet xs) { + global::System.Xml.Schema.XmlSchemaComplexType type = new global::System.Xml.Schema.XmlSchemaComplexType(); + global::System.Xml.Schema.XmlSchemaSequence sequence = new global::System.Xml.Schema.XmlSchemaSequence(); + CustomStoreDataSet ds = new CustomStoreDataSet(); + global::System.Xml.Schema.XmlSchemaAny any1 = new global::System.Xml.Schema.XmlSchemaAny(); + any1.Namespace = "http://www.w3.org/2001/XMLSchema"; + any1.MinOccurs = new decimal(0); + any1.MaxOccurs = decimal.MaxValue; + any1.ProcessContents = global::System.Xml.Schema.XmlSchemaContentProcessing.Lax; + sequence.Items.Add(any1); + global::System.Xml.Schema.XmlSchemaAny any2 = new global::System.Xml.Schema.XmlSchemaAny(); + any2.Namespace = "urn:schemas-microsoft-com:xml-diffgram-v1"; + any2.MinOccurs = new decimal(1); + any2.ProcessContents = global::System.Xml.Schema.XmlSchemaContentProcessing.Lax; + sequence.Items.Add(any2); + global::System.Xml.Schema.XmlSchemaAttribute attribute1 = new global::System.Xml.Schema.XmlSchemaAttribute(); + attribute1.Name = "namespace"; + attribute1.FixedValue = ds.Namespace; + type.Attributes.Add(attribute1); + global::System.Xml.Schema.XmlSchemaAttribute attribute2 = new global::System.Xml.Schema.XmlSchemaAttribute(); + attribute2.Name = "tableTypeName"; + attribute2.FixedValue = "AssociationDataTable"; + type.Attributes.Add(attribute2); + type.Particle = sequence; + global::System.Xml.Schema.XmlSchema dsSchema = ds.GetSchemaSerializable(); + if (xs.Contains(dsSchema.TargetNamespace)) { + global::System.IO.MemoryStream s1 = new global::System.IO.MemoryStream(); + global::System.IO.MemoryStream s2 = new global::System.IO.MemoryStream(); + try { + global::System.Xml.Schema.XmlSchema schema = null; + dsSchema.Write(s1); + for (global::System.Collections.IEnumerator schemas = xs.Schemas(dsSchema.TargetNamespace).GetEnumerator(); schemas.MoveNext(); ) { + schema = ((global::System.Xml.Schema.XmlSchema)(schemas.Current)); + s2.SetLength(0); + schema.Write(s2); + if ((s1.Length == s2.Length)) { + s1.Position = 0; + s2.Position = 0; + for (; ((s1.Position != s1.Length) + && (s1.ReadByte() == s2.ReadByte())); ) { + ; + } + if ((s1.Position == s1.Length)) { + return type; + } + } + } + } + finally { + if ((s1 != null)) { + s1.Close(); + } + if ((s2 != null)) { + s2.Close(); + } + } + } + xs.Add(dsSchema); + return type; + } + } + + /// <summary> + ///Represents the strongly named DataTable class. + ///</summary> + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")] + [global::System.Serializable()] + [global::System.Xml.Serialization.XmlSchemaProviderAttribute("GetTypedTableSchema")] + public partial class NonceDataTable : global::System.Data.DataTable, global::System.Collections.IEnumerable { + + private global::System.Data.DataColumn columnCode; + + private global::System.Data.DataColumn columnExpires; + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public NonceDataTable() { + this.TableName = "Nonce"; + this.BeginInit(); + this.InitClass(); + this.EndInit(); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + internal NonceDataTable(global::System.Data.DataTable table) { + this.TableName = table.TableName; + if ((table.CaseSensitive != table.DataSet.CaseSensitive)) { + this.CaseSensitive = table.CaseSensitive; + } + if ((table.Locale.ToString() != table.DataSet.Locale.ToString())) { + this.Locale = table.Locale; + } + if ((table.Namespace != table.DataSet.Namespace)) { + this.Namespace = table.Namespace; + } + this.Prefix = table.Prefix; + this.MinimumCapacity = table.MinimumCapacity; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected NonceDataTable(global::System.Runtime.Serialization.SerializationInfo info, global::System.Runtime.Serialization.StreamingContext context) : + base(info, context) { + this.InitVars(); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public global::System.Data.DataColumn CodeColumn { + get { + return this.columnCode; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public global::System.Data.DataColumn ExpiresColumn { + get { + return this.columnExpires; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.ComponentModel.Browsable(false)] + public int Count { + get { + return this.Rows.Count; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public NonceRow this[int index] { + get { + return ((NonceRow)(this.Rows[index])); + } + } + + public event NonceRowChangeEventHandler NonceRowChanging; + + public event NonceRowChangeEventHandler NonceRowChanged; + + public event NonceRowChangeEventHandler NonceRowDeleting; + + public event NonceRowChangeEventHandler NonceRowDeleted; + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public void AddNonceRow(NonceRow row) { + this.Rows.Add(row); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public NonceRow AddNonceRow(string Code, System.DateTime Expires) { + NonceRow rowNonceRow = ((NonceRow)(this.NewRow())); + object[] columnValuesArray = new object[] { + Code, + Expires}; + rowNonceRow.ItemArray = columnValuesArray; + this.Rows.Add(rowNonceRow); + return rowNonceRow; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public NonceRow FindByCode(string Code) { + return ((NonceRow)(this.Rows.Find(new object[] { + Code}))); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public virtual global::System.Collections.IEnumerator GetEnumerator() { + return this.Rows.GetEnumerator(); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public override global::System.Data.DataTable Clone() { + NonceDataTable cln = ((NonceDataTable)(base.Clone())); + cln.InitVars(); + return cln; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override global::System.Data.DataTable CreateInstance() { + return new NonceDataTable(); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + internal void InitVars() { + this.columnCode = base.Columns["Code"]; + this.columnExpires = base.Columns["Expires"]; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + private void InitClass() { + this.columnCode = new global::System.Data.DataColumn("Code", typeof(string), null, global::System.Data.MappingType.Element); + base.Columns.Add(this.columnCode); + this.columnExpires = new global::System.Data.DataColumn("Expires", typeof(global::System.DateTime), null, global::System.Data.MappingType.Element); + base.Columns.Add(this.columnExpires); + this.Constraints.Add(new global::System.Data.UniqueConstraint("PrimaryKey", new global::System.Data.DataColumn[] { + this.columnCode}, true)); + this.columnCode.AllowDBNull = false; + this.columnCode.Unique = true; + this.columnExpires.AllowDBNull = false; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public NonceRow NewNonceRow() { + return ((NonceRow)(this.NewRow())); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override global::System.Data.DataRow NewRowFromBuilder(global::System.Data.DataRowBuilder builder) { + return new NonceRow(builder); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override global::System.Type GetRowType() { + return typeof(NonceRow); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override void OnRowChanged(global::System.Data.DataRowChangeEventArgs e) { + base.OnRowChanged(e); + if ((this.NonceRowChanged != null)) { + this.NonceRowChanged(this, new NonceRowChangeEvent(((NonceRow)(e.Row)), e.Action)); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override void OnRowChanging(global::System.Data.DataRowChangeEventArgs e) { + base.OnRowChanging(e); + if ((this.NonceRowChanging != null)) { + this.NonceRowChanging(this, new NonceRowChangeEvent(((NonceRow)(e.Row)), e.Action)); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override void OnRowDeleted(global::System.Data.DataRowChangeEventArgs e) { + base.OnRowDeleted(e); + if ((this.NonceRowDeleted != null)) { + this.NonceRowDeleted(this, new NonceRowChangeEvent(((NonceRow)(e.Row)), e.Action)); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override void OnRowDeleting(global::System.Data.DataRowChangeEventArgs e) { + base.OnRowDeleting(e); + if ((this.NonceRowDeleting != null)) { + this.NonceRowDeleting(this, new NonceRowChangeEvent(((NonceRow)(e.Row)), e.Action)); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public void RemoveNonceRow(NonceRow row) { + this.Rows.Remove(row); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public static global::System.Xml.Schema.XmlSchemaComplexType GetTypedTableSchema(global::System.Xml.Schema.XmlSchemaSet xs) { + global::System.Xml.Schema.XmlSchemaComplexType type = new global::System.Xml.Schema.XmlSchemaComplexType(); + global::System.Xml.Schema.XmlSchemaSequence sequence = new global::System.Xml.Schema.XmlSchemaSequence(); + CustomStoreDataSet ds = new CustomStoreDataSet(); + global::System.Xml.Schema.XmlSchemaAny any1 = new global::System.Xml.Schema.XmlSchemaAny(); + any1.Namespace = "http://www.w3.org/2001/XMLSchema"; + any1.MinOccurs = new decimal(0); + any1.MaxOccurs = decimal.MaxValue; + any1.ProcessContents = global::System.Xml.Schema.XmlSchemaContentProcessing.Lax; + sequence.Items.Add(any1); + global::System.Xml.Schema.XmlSchemaAny any2 = new global::System.Xml.Schema.XmlSchemaAny(); + any2.Namespace = "urn:schemas-microsoft-com:xml-diffgram-v1"; + any2.MinOccurs = new decimal(1); + any2.ProcessContents = global::System.Xml.Schema.XmlSchemaContentProcessing.Lax; + sequence.Items.Add(any2); + global::System.Xml.Schema.XmlSchemaAttribute attribute1 = new global::System.Xml.Schema.XmlSchemaAttribute(); + attribute1.Name = "namespace"; + attribute1.FixedValue = ds.Namespace; + type.Attributes.Add(attribute1); + global::System.Xml.Schema.XmlSchemaAttribute attribute2 = new global::System.Xml.Schema.XmlSchemaAttribute(); + attribute2.Name = "tableTypeName"; + attribute2.FixedValue = "NonceDataTable"; + type.Attributes.Add(attribute2); + type.Particle = sequence; + global::System.Xml.Schema.XmlSchema dsSchema = ds.GetSchemaSerializable(); + if (xs.Contains(dsSchema.TargetNamespace)) { + global::System.IO.MemoryStream s1 = new global::System.IO.MemoryStream(); + global::System.IO.MemoryStream s2 = new global::System.IO.MemoryStream(); + try { + global::System.Xml.Schema.XmlSchema schema = null; + dsSchema.Write(s1); + for (global::System.Collections.IEnumerator schemas = xs.Schemas(dsSchema.TargetNamespace).GetEnumerator(); schemas.MoveNext(); ) { + schema = ((global::System.Xml.Schema.XmlSchema)(schemas.Current)); + s2.SetLength(0); + schema.Write(s2); + if ((s1.Length == s2.Length)) { + s1.Position = 0; + s2.Position = 0; + for (; ((s1.Position != s1.Length) + && (s1.ReadByte() == s2.ReadByte())); ) { + ; + } + if ((s1.Position == s1.Length)) { + return type; + } + } + } + } + finally { + if ((s1 != null)) { + s1.Close(); + } + if ((s2 != null)) { + s2.Close(); + } + } + } + xs.Add(dsSchema); + return type; + } + } + + /// <summary> + ///Represents strongly named DataRow class. + ///</summary> + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")] + public partial class AssociationRow : global::System.Data.DataRow { + + private AssociationDataTable tableAssociation; + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + internal AssociationRow(global::System.Data.DataRowBuilder rb) : + base(rb) { + this.tableAssociation = ((AssociationDataTable)(this.Table)); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public string DistinguishingFactor { + get { + return ((string)(this[this.tableAssociation.DistinguishingFactorColumn])); + } + set { + this[this.tableAssociation.DistinguishingFactorColumn] = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public string Handle { + get { + return ((string)(this[this.tableAssociation.HandleColumn])); + } + set { + this[this.tableAssociation.HandleColumn] = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public System.DateTime Expires { + get { + return ((global::System.DateTime)(this[this.tableAssociation.ExpiresColumn])); + } + set { + this[this.tableAssociation.ExpiresColumn] = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public byte[] PrivateData { + get { + return ((byte[])(this[this.tableAssociation.PrivateDataColumn])); + } + set { + this[this.tableAssociation.PrivateDataColumn] = value; + } + } + } + + /// <summary> + ///Represents strongly named DataRow class. + ///</summary> + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")] + public partial class NonceRow : global::System.Data.DataRow { + + private NonceDataTable tableNonce; + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + internal NonceRow(global::System.Data.DataRowBuilder rb) : + base(rb) { + this.tableNonce = ((NonceDataTable)(this.Table)); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public string Code { + get { + return ((string)(this[this.tableNonce.CodeColumn])); + } + set { + this[this.tableNonce.CodeColumn] = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public System.DateTime Expires { + get { + return ((global::System.DateTime)(this[this.tableNonce.ExpiresColumn])); + } + set { + this[this.tableNonce.ExpiresColumn] = value; + } + } + } + + /// <summary> + ///Row event argument class + ///</summary> + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")] + public class AssociationRowChangeEvent : global::System.EventArgs { + + private AssociationRow eventRow; + + private global::System.Data.DataRowAction eventAction; + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public AssociationRowChangeEvent(AssociationRow row, global::System.Data.DataRowAction action) { + this.eventRow = row; + this.eventAction = action; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public AssociationRow Row { + get { + return this.eventRow; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public global::System.Data.DataRowAction Action { + get { + return this.eventAction; + } + } + } + + /// <summary> + ///Row event argument class + ///</summary> + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")] + public class NonceRowChangeEvent : global::System.EventArgs { + + private NonceRow eventRow; + + private global::System.Data.DataRowAction eventAction; + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public NonceRowChangeEvent(NonceRow row, global::System.Data.DataRowAction action) { + this.eventRow = row; + this.eventAction = action; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public NonceRow Row { + get { + return this.eventRow; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public global::System.Data.DataRowAction Action { + get { + return this.eventAction; + } + } + } + } +} + +#pragma warning restore 1591
\ No newline at end of file diff --git a/samples/RelyingPartyWebForms/Code/CustomStoreDataSet.cs b/samples/RelyingPartyWebForms/Code/CustomStoreDataSet.cs new file mode 100644 index 0000000..8dc69d4 --- /dev/null +++ b/samples/RelyingPartyWebForms/Code/CustomStoreDataSet.cs @@ -0,0 +1,4 @@ +namespace RelyingPartyWebForms.Code { + public partial class CustomStoreDataSet { + } +} diff --git a/samples/RelyingPartyWebForms/Code/CustomStoreDataSet.xsc b/samples/RelyingPartyWebForms/Code/CustomStoreDataSet.xsc new file mode 100644 index 0000000..05b0199 --- /dev/null +++ b/samples/RelyingPartyWebForms/Code/CustomStoreDataSet.xsc @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--<autogenerated> + This code was generated by a tool. + Changes to this file may cause incorrect behavior and will be lost if + the code is regenerated. +</autogenerated>--> +<DataSetUISetting Version="1.00" xmlns="urn:schemas-microsoft-com:xml-msdatasource"> + <TableUISettings /> +</DataSetUISetting>
\ No newline at end of file diff --git a/samples/RelyingPartyWebForms/Code/CustomStoreDataSet.xsd b/samples/RelyingPartyWebForms/Code/CustomStoreDataSet.xsd new file mode 100644 index 0000000..d70c352 --- /dev/null +++ b/samples/RelyingPartyWebForms/Code/CustomStoreDataSet.xsd @@ -0,0 +1,46 @@ +<?xml version="1.0" encoding="utf-8"?> +<xs:schema id="CustomStoreDataSet" targetNamespace="http://tempuri.org/CustomStoreDataSet.xsd" xmlns:mstns="http://tempuri.org/CustomStoreDataSet.xsd" xmlns="http://tempuri.org/CustomStoreDataSet.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:msprop="urn:schemas-microsoft-com:xml-msprop" attributeFormDefault="qualified" elementFormDefault="qualified"> + <xs:annotation> + <xs:appinfo source="urn:schemas-microsoft-com:xml-msdatasource"> + <DataSource DefaultConnectionIndex="0" FunctionsComponentName="QueriesTableAdapter" Modifier="AutoLayout, AnsiClass, Class, Public" SchemaSerializationMode="IncludeSchema" xmlns="urn:schemas-microsoft-com:xml-msdatasource"> + <Connections /> + <Tables /> + <Sources /> + </DataSource> + </xs:appinfo> + </xs:annotation> + <xs:element name="CustomStoreDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true" msprop:Generator_UserDSName="CustomStoreDataSet" msprop:Generator_DataSetName="CustomStoreDataSet" msprop:EnableTableAdapterManager="true"> + <xs:complexType> + <xs:choice minOccurs="0" maxOccurs="unbounded"> + <xs:element name="Association" msprop:Generator_UserTableName="Association" msprop:Generator_RowDeletedName="AssociationRowDeleted" msprop:Generator_RowChangedName="AssociationRowChanged" msprop:Generator_RowClassName="AssociationRow" msprop:Generator_RowChangingName="AssociationRowChanging" msprop:Generator_RowEvArgName="AssociationRowChangeEvent" msprop:Generator_RowEvHandlerName="AssociationRowChangeEventHandler" msprop:Generator_TableClassName="AssociationDataTable" msprop:Generator_TableVarName="tableAssociation" msprop:Generator_RowDeletingName="AssociationRowDeleting" msprop:Generator_TablePropName="Association"> + <xs:complexType> + <xs:sequence> + <xs:element name="DistinguishingFactor" msprop:Generator_UserColumnName="DistinguishingFactor" msprop:Generator_ColumnPropNameInRow="DistinguishingFactor" msprop:Generator_ColumnVarNameInTable="columnDistinguishingFactor" msprop:Generator_ColumnPropNameInTable="DistinguishingFactorColumn" type="xs:string" /> + <xs:element name="Handle" msprop:Generator_UserColumnName="Handle" msprop:Generator_ColumnPropNameInRow="Handle" msprop:Generator_ColumnVarNameInTable="columnHandle" msprop:Generator_ColumnPropNameInTable="HandleColumn" type="xs:string" /> + <xs:element name="Expires" msprop:Generator_UserColumnName="Expires" msprop:Generator_ColumnPropNameInRow="Expires" msprop:Generator_ColumnVarNameInTable="columnExpires" msprop:Generator_ColumnPropNameInTable="ExpiresColumn" type="xs:dateTime" /> + <xs:element name="PrivateData" msprop:Generator_UserColumnName="PrivateData" msprop:Generator_ColumnPropNameInRow="PrivateData" msprop:Generator_ColumnVarNameInTable="columnPrivateData" msprop:Generator_ColumnPropNameInTable="PrivateDataColumn" type="xs:base64Binary" /> + </xs:sequence> + </xs:complexType> + </xs:element> + <xs:element name="Nonce" msprop:Generator_UserTableName="Nonce" msprop:Generator_RowDeletedName="NonceRowDeleted" msprop:Generator_RowChangedName="NonceRowChanged" msprop:Generator_RowClassName="NonceRow" msprop:Generator_RowChangingName="NonceRowChanging" msprop:Generator_RowEvArgName="NonceRowChangeEvent" msprop:Generator_RowEvHandlerName="NonceRowChangeEventHandler" msprop:Generator_TableClassName="NonceDataTable" msprop:Generator_TableVarName="tableNonce" msprop:Generator_RowDeletingName="NonceRowDeleting" msprop:Generator_TablePropName="Nonce"> + <xs:complexType> + <xs:sequence> + <xs:element name="Code" msprop:Generator_UserColumnName="Code" msprop:Generator_ColumnVarNameInTable="columnCode" msprop:Generator_ColumnPropNameInRow="Code" msprop:Generator_ColumnPropNameInTable="CodeColumn" type="xs:string" /> + <xs:element name="Issued" msprop:Generator_UserColumnName="Issued" msprop:Generator_ColumnVarNameInTable="columnIssued" msprop:Generator_ColumnPropNameInRow="Issued" msprop:Generator_ColumnPropNameInTable="IssuedColumn" type="xs:dateTime" /> + <xs:element name="Expires" msprop:Generator_UserColumnName="Expires" msprop:Generator_ColumnPropNameInRow="Expires" msprop:Generator_ColumnVarNameInTable="columnExpires" msprop:Generator_ColumnPropNameInTable="ExpiresColumn" type="xs:dateTime" /> + </xs:sequence> + </xs:complexType> + </xs:element> + </xs:choice> + </xs:complexType> + <xs:unique name="PrimaryKey" msdata:PrimaryKey="true"> + <xs:selector xpath=".//mstns:Association" /> + <xs:field xpath="mstns:DistinguishingFactor" /> + <xs:field xpath="mstns:Handle" /> + </xs:unique> + <xs:unique name="Nonce_PrimaryKey" msdata:ConstraintName="PrimaryKey" msdata:PrimaryKey="true"> + <xs:selector xpath=".//mstns:Nonce" /> + <xs:field xpath="mstns:Code" /> + </xs:unique> + </xs:element> +</xs:schema>
\ No newline at end of file diff --git a/samples/RelyingPartyWebForms/Code/CustomStoreDataSet.xss b/samples/RelyingPartyWebForms/Code/CustomStoreDataSet.xss new file mode 100644 index 0000000..483a137 --- /dev/null +++ b/samples/RelyingPartyWebForms/Code/CustomStoreDataSet.xss @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="utf-8"?> +<!--<autogenerated> + This code was generated by a tool to store the dataset designer's layout information. + Changes to this file may cause incorrect behavior and will be lost if + the code is regenerated. +</autogenerated>--> +<DiagramLayout xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" ex:showrelationlabel="False" ViewPortX="0" ViewPortY="0" xmlns:ex="urn:schemas-microsoft-com:xml-msdatasource-layout-extended" xmlns="urn:schemas-microsoft-com:xml-msdatasource-layout"> + <Shapes> + <Shape ID="DesignTable:Association" ZOrder="2" X="349" Y="83" Height="105" Width="154" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="101" /> + <Shape ID="DesignTable:Nonce" ZOrder="1" X="604" Y="86" Height="86" Width="150" AdapterExpanded="true" DataTableExpanded="true" OldAdapterHeight="0" OldDataTableHeight="0" SplitterPosition="82" /> + </Shapes> + <Connectors /> +</DiagramLayout>
\ No newline at end of file diff --git a/samples/RelyingPartyWebForms/Code/CustomStoreDataSet1.Designer.cs b/samples/RelyingPartyWebForms/Code/CustomStoreDataSet1.Designer.cs new file mode 100644 index 0000000..49e1a90 --- /dev/null +++ b/samples/RelyingPartyWebForms/Code/CustomStoreDataSet1.Designer.cs @@ -0,0 +1,990 @@ +//------------------------------------------------------------------------------ +// <auto-generated> +// This code was generated by a tool. +// Runtime Version:2.0.50727.3521 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// </auto-generated> +//------------------------------------------------------------------------------ + +#pragma warning disable 1591 + +namespace RelyingPartyWebForms.Code { + + + /// <summary> + ///Represents a strongly typed in-memory cache of data. + ///</summary> + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")] + [global::System.Serializable()] + [global::System.ComponentModel.DesignerCategoryAttribute("code")] + [global::System.ComponentModel.ToolboxItem(true)] + [global::System.Xml.Serialization.XmlSchemaProviderAttribute("GetTypedDataSetSchema")] + [global::System.Xml.Serialization.XmlRootAttribute("CustomStoreDataSet")] + [global::System.ComponentModel.Design.HelpKeywordAttribute("vs.data.DataSet")] + public partial class CustomStoreDataSet : global::System.Data.DataSet { + + private AssociationDataTable tableAssociation; + + private NonceDataTable tableNonce; + + private global::System.Data.SchemaSerializationMode _schemaSerializationMode = global::System.Data.SchemaSerializationMode.IncludeSchema; + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public CustomStoreDataSet() { + this.BeginInit(); + this.InitClass(); + global::System.ComponentModel.CollectionChangeEventHandler schemaChangedHandler = new global::System.ComponentModel.CollectionChangeEventHandler(this.SchemaChanged); + base.Tables.CollectionChanged += schemaChangedHandler; + base.Relations.CollectionChanged += schemaChangedHandler; + this.EndInit(); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected CustomStoreDataSet(global::System.Runtime.Serialization.SerializationInfo info, global::System.Runtime.Serialization.StreamingContext context) : + base(info, context, false) { + if ((this.IsBinarySerialized(info, context) == true)) { + this.InitVars(false); + global::System.ComponentModel.CollectionChangeEventHandler schemaChangedHandler1 = new global::System.ComponentModel.CollectionChangeEventHandler(this.SchemaChanged); + this.Tables.CollectionChanged += schemaChangedHandler1; + this.Relations.CollectionChanged += schemaChangedHandler1; + return; + } + string strSchema = ((string)(info.GetValue("XmlSchema", typeof(string)))); + if ((this.DetermineSchemaSerializationMode(info, context) == global::System.Data.SchemaSerializationMode.IncludeSchema)) { + global::System.Data.DataSet ds = new global::System.Data.DataSet(); + ds.ReadXmlSchema(new global::System.Xml.XmlTextReader(new global::System.IO.StringReader(strSchema))); + if ((ds.Tables["Association"] != null)) { + base.Tables.Add(new AssociationDataTable(ds.Tables["Association"])); + } + if ((ds.Tables["Nonce"] != null)) { + base.Tables.Add(new NonceDataTable(ds.Tables["Nonce"])); + } + this.DataSetName = ds.DataSetName; + this.Prefix = ds.Prefix; + this.Namespace = ds.Namespace; + this.Locale = ds.Locale; + this.CaseSensitive = ds.CaseSensitive; + this.EnforceConstraints = ds.EnforceConstraints; + this.Merge(ds, false, global::System.Data.MissingSchemaAction.Add); + this.InitVars(); + } + else { + this.ReadXmlSchema(new global::System.Xml.XmlTextReader(new global::System.IO.StringReader(strSchema))); + } + this.GetSerializationData(info, context); + global::System.ComponentModel.CollectionChangeEventHandler schemaChangedHandler = new global::System.ComponentModel.CollectionChangeEventHandler(this.SchemaChanged); + base.Tables.CollectionChanged += schemaChangedHandler; + this.Relations.CollectionChanged += schemaChangedHandler; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.ComponentModel.Browsable(false)] + [global::System.ComponentModel.DesignerSerializationVisibility(global::System.ComponentModel.DesignerSerializationVisibility.Content)] + public AssociationDataTable Association { + get { + return this.tableAssociation; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.ComponentModel.Browsable(false)] + [global::System.ComponentModel.DesignerSerializationVisibility(global::System.ComponentModel.DesignerSerializationVisibility.Content)] + public NonceDataTable Nonce { + get { + return this.tableNonce; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.ComponentModel.BrowsableAttribute(true)] + [global::System.ComponentModel.DesignerSerializationVisibilityAttribute(global::System.ComponentModel.DesignerSerializationVisibility.Visible)] + public override global::System.Data.SchemaSerializationMode SchemaSerializationMode { + get { + return this._schemaSerializationMode; + } + set { + this._schemaSerializationMode = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.ComponentModel.DesignerSerializationVisibilityAttribute(global::System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public new global::System.Data.DataTableCollection Tables { + get { + return base.Tables; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.ComponentModel.DesignerSerializationVisibilityAttribute(global::System.ComponentModel.DesignerSerializationVisibility.Hidden)] + public new global::System.Data.DataRelationCollection Relations { + get { + return base.Relations; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override void InitializeDerivedDataSet() { + this.BeginInit(); + this.InitClass(); + this.EndInit(); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public override global::System.Data.DataSet Clone() { + CustomStoreDataSet cln = ((CustomStoreDataSet)(base.Clone())); + cln.InitVars(); + cln.SchemaSerializationMode = this.SchemaSerializationMode; + return cln; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override bool ShouldSerializeTables() { + return false; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override bool ShouldSerializeRelations() { + return false; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override void ReadXmlSerializable(global::System.Xml.XmlReader reader) { + if ((this.DetermineSchemaSerializationMode(reader) == global::System.Data.SchemaSerializationMode.IncludeSchema)) { + this.Reset(); + global::System.Data.DataSet ds = new global::System.Data.DataSet(); + ds.ReadXml(reader); + if ((ds.Tables["Association"] != null)) { + base.Tables.Add(new AssociationDataTable(ds.Tables["Association"])); + } + if ((ds.Tables["Nonce"] != null)) { + base.Tables.Add(new NonceDataTable(ds.Tables["Nonce"])); + } + this.DataSetName = ds.DataSetName; + this.Prefix = ds.Prefix; + this.Namespace = ds.Namespace; + this.Locale = ds.Locale; + this.CaseSensitive = ds.CaseSensitive; + this.EnforceConstraints = ds.EnforceConstraints; + this.Merge(ds, false, global::System.Data.MissingSchemaAction.Add); + this.InitVars(); + } + else { + this.ReadXml(reader); + this.InitVars(); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override global::System.Xml.Schema.XmlSchema GetSchemaSerializable() { + global::System.IO.MemoryStream stream = new global::System.IO.MemoryStream(); + this.WriteXmlSchema(new global::System.Xml.XmlTextWriter(stream, null)); + stream.Position = 0; + return global::System.Xml.Schema.XmlSchema.Read(new global::System.Xml.XmlTextReader(stream), null); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + internal void InitVars() { + this.InitVars(true); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + internal void InitVars(bool initTable) { + this.tableAssociation = ((AssociationDataTable)(base.Tables["Association"])); + if ((initTable == true)) { + if ((this.tableAssociation != null)) { + this.tableAssociation.InitVars(); + } + } + this.tableNonce = ((NonceDataTable)(base.Tables["Nonce"])); + if ((initTable == true)) { + if ((this.tableNonce != null)) { + this.tableNonce.InitVars(); + } + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + private void InitClass() { + this.DataSetName = "CustomStoreDataSet"; + this.Prefix = ""; + this.Namespace = "http://tempuri.org/CustomStoreDataSet.xsd"; + this.EnforceConstraints = true; + this.SchemaSerializationMode = global::System.Data.SchemaSerializationMode.IncludeSchema; + this.tableAssociation = new AssociationDataTable(); + base.Tables.Add(this.tableAssociation); + this.tableNonce = new NonceDataTable(); + base.Tables.Add(this.tableNonce); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + private bool ShouldSerializeAssociation() { + return false; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + private bool ShouldSerializeNonce() { + return false; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + private void SchemaChanged(object sender, global::System.ComponentModel.CollectionChangeEventArgs e) { + if ((e.Action == global::System.ComponentModel.CollectionChangeAction.Remove)) { + this.InitVars(); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public static global::System.Xml.Schema.XmlSchemaComplexType GetTypedDataSetSchema(global::System.Xml.Schema.XmlSchemaSet xs) { + CustomStoreDataSet ds = new CustomStoreDataSet(); + global::System.Xml.Schema.XmlSchemaComplexType type = new global::System.Xml.Schema.XmlSchemaComplexType(); + global::System.Xml.Schema.XmlSchemaSequence sequence = new global::System.Xml.Schema.XmlSchemaSequence(); + global::System.Xml.Schema.XmlSchemaAny any = new global::System.Xml.Schema.XmlSchemaAny(); + any.Namespace = ds.Namespace; + sequence.Items.Add(any); + type.Particle = sequence; + global::System.Xml.Schema.XmlSchema dsSchema = ds.GetSchemaSerializable(); + if (xs.Contains(dsSchema.TargetNamespace)) { + global::System.IO.MemoryStream s1 = new global::System.IO.MemoryStream(); + global::System.IO.MemoryStream s2 = new global::System.IO.MemoryStream(); + try { + global::System.Xml.Schema.XmlSchema schema = null; + dsSchema.Write(s1); + for (global::System.Collections.IEnumerator schemas = xs.Schemas(dsSchema.TargetNamespace).GetEnumerator(); schemas.MoveNext(); ) { + schema = ((global::System.Xml.Schema.XmlSchema)(schemas.Current)); + s2.SetLength(0); + schema.Write(s2); + if ((s1.Length == s2.Length)) { + s1.Position = 0; + s2.Position = 0; + for (; ((s1.Position != s1.Length) + && (s1.ReadByte() == s2.ReadByte())); ) { + ; + } + if ((s1.Position == s1.Length)) { + return type; + } + } + } + } + finally { + if ((s1 != null)) { + s1.Close(); + } + if ((s2 != null)) { + s2.Close(); + } + } + } + xs.Add(dsSchema); + return type; + } + + public delegate void AssociationRowChangeEventHandler(object sender, AssociationRowChangeEvent e); + + public delegate void NonceRowChangeEventHandler(object sender, NonceRowChangeEvent e); + + /// <summary> + ///Represents the strongly named DataTable class. + ///</summary> + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")] + [global::System.Serializable()] + [global::System.Xml.Serialization.XmlSchemaProviderAttribute("GetTypedTableSchema")] + public partial class AssociationDataTable : global::System.Data.TypedTableBase<AssociationRow> { + + private global::System.Data.DataColumn columnDistinguishingFactor; + + private global::System.Data.DataColumn columnHandle; + + private global::System.Data.DataColumn columnExpires; + + private global::System.Data.DataColumn columnPrivateData; + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public AssociationDataTable() { + this.TableName = "Association"; + this.BeginInit(); + this.InitClass(); + this.EndInit(); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + internal AssociationDataTable(global::System.Data.DataTable table) { + this.TableName = table.TableName; + if ((table.CaseSensitive != table.DataSet.CaseSensitive)) { + this.CaseSensitive = table.CaseSensitive; + } + if ((table.Locale.ToString() != table.DataSet.Locale.ToString())) { + this.Locale = table.Locale; + } + if ((table.Namespace != table.DataSet.Namespace)) { + this.Namespace = table.Namespace; + } + this.Prefix = table.Prefix; + this.MinimumCapacity = table.MinimumCapacity; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected AssociationDataTable(global::System.Runtime.Serialization.SerializationInfo info, global::System.Runtime.Serialization.StreamingContext context) : + base(info, context) { + this.InitVars(); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public global::System.Data.DataColumn DistinguishingFactorColumn { + get { + return this.columnDistinguishingFactor; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public global::System.Data.DataColumn HandleColumn { + get { + return this.columnHandle; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public global::System.Data.DataColumn ExpiresColumn { + get { + return this.columnExpires; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public global::System.Data.DataColumn PrivateDataColumn { + get { + return this.columnPrivateData; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.ComponentModel.Browsable(false)] + public int Count { + get { + return this.Rows.Count; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public AssociationRow this[int index] { + get { + return ((AssociationRow)(this.Rows[index])); + } + } + + public event AssociationRowChangeEventHandler AssociationRowChanging; + + public event AssociationRowChangeEventHandler AssociationRowChanged; + + public event AssociationRowChangeEventHandler AssociationRowDeleting; + + public event AssociationRowChangeEventHandler AssociationRowDeleted; + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public void AddAssociationRow(AssociationRow row) { + this.Rows.Add(row); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public AssociationRow AddAssociationRow(string DistinguishingFactor, string Handle, System.DateTime Expires, byte[] PrivateData) { + AssociationRow rowAssociationRow = ((AssociationRow)(this.NewRow())); + object[] columnValuesArray = new object[] { + DistinguishingFactor, + Handle, + Expires, + PrivateData}; + rowAssociationRow.ItemArray = columnValuesArray; + this.Rows.Add(rowAssociationRow); + return rowAssociationRow; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public AssociationRow FindByDistinguishingFactorHandle(string DistinguishingFactor, string Handle) { + return ((AssociationRow)(this.Rows.Find(new object[] { + DistinguishingFactor, + Handle}))); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public override global::System.Data.DataTable Clone() { + AssociationDataTable cln = ((AssociationDataTable)(base.Clone())); + cln.InitVars(); + return cln; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override global::System.Data.DataTable CreateInstance() { + return new AssociationDataTable(); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + internal void InitVars() { + this.columnDistinguishingFactor = base.Columns["DistinguishingFactor"]; + this.columnHandle = base.Columns["Handle"]; + this.columnExpires = base.Columns["Expires"]; + this.columnPrivateData = base.Columns["PrivateData"]; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + private void InitClass() { + this.columnDistinguishingFactor = new global::System.Data.DataColumn("DistinguishingFactor", typeof(string), null, global::System.Data.MappingType.Element); + base.Columns.Add(this.columnDistinguishingFactor); + this.columnHandle = new global::System.Data.DataColumn("Handle", typeof(string), null, global::System.Data.MappingType.Element); + base.Columns.Add(this.columnHandle); + this.columnExpires = new global::System.Data.DataColumn("Expires", typeof(global::System.DateTime), null, global::System.Data.MappingType.Element); + base.Columns.Add(this.columnExpires); + this.columnPrivateData = new global::System.Data.DataColumn("PrivateData", typeof(byte[]), null, global::System.Data.MappingType.Element); + base.Columns.Add(this.columnPrivateData); + this.Constraints.Add(new global::System.Data.UniqueConstraint("PrimaryKey", new global::System.Data.DataColumn[] { + this.columnDistinguishingFactor, + this.columnHandle}, true)); + this.columnDistinguishingFactor.AllowDBNull = false; + this.columnHandle.AllowDBNull = false; + this.columnExpires.AllowDBNull = false; + this.columnPrivateData.AllowDBNull = false; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public AssociationRow NewAssociationRow() { + return ((AssociationRow)(this.NewRow())); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override global::System.Data.DataRow NewRowFromBuilder(global::System.Data.DataRowBuilder builder) { + return new AssociationRow(builder); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override global::System.Type GetRowType() { + return typeof(AssociationRow); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override void OnRowChanged(global::System.Data.DataRowChangeEventArgs e) { + base.OnRowChanged(e); + if ((this.AssociationRowChanged != null)) { + this.AssociationRowChanged(this, new AssociationRowChangeEvent(((AssociationRow)(e.Row)), e.Action)); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override void OnRowChanging(global::System.Data.DataRowChangeEventArgs e) { + base.OnRowChanging(e); + if ((this.AssociationRowChanging != null)) { + this.AssociationRowChanging(this, new AssociationRowChangeEvent(((AssociationRow)(e.Row)), e.Action)); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override void OnRowDeleted(global::System.Data.DataRowChangeEventArgs e) { + base.OnRowDeleted(e); + if ((this.AssociationRowDeleted != null)) { + this.AssociationRowDeleted(this, new AssociationRowChangeEvent(((AssociationRow)(e.Row)), e.Action)); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override void OnRowDeleting(global::System.Data.DataRowChangeEventArgs e) { + base.OnRowDeleting(e); + if ((this.AssociationRowDeleting != null)) { + this.AssociationRowDeleting(this, new AssociationRowChangeEvent(((AssociationRow)(e.Row)), e.Action)); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public void RemoveAssociationRow(AssociationRow row) { + this.Rows.Remove(row); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public static global::System.Xml.Schema.XmlSchemaComplexType GetTypedTableSchema(global::System.Xml.Schema.XmlSchemaSet xs) { + global::System.Xml.Schema.XmlSchemaComplexType type = new global::System.Xml.Schema.XmlSchemaComplexType(); + global::System.Xml.Schema.XmlSchemaSequence sequence = new global::System.Xml.Schema.XmlSchemaSequence(); + CustomStoreDataSet ds = new CustomStoreDataSet(); + global::System.Xml.Schema.XmlSchemaAny any1 = new global::System.Xml.Schema.XmlSchemaAny(); + any1.Namespace = "http://www.w3.org/2001/XMLSchema"; + any1.MinOccurs = new decimal(0); + any1.MaxOccurs = decimal.MaxValue; + any1.ProcessContents = global::System.Xml.Schema.XmlSchemaContentProcessing.Lax; + sequence.Items.Add(any1); + global::System.Xml.Schema.XmlSchemaAny any2 = new global::System.Xml.Schema.XmlSchemaAny(); + any2.Namespace = "urn:schemas-microsoft-com:xml-diffgram-v1"; + any2.MinOccurs = new decimal(1); + any2.ProcessContents = global::System.Xml.Schema.XmlSchemaContentProcessing.Lax; + sequence.Items.Add(any2); + global::System.Xml.Schema.XmlSchemaAttribute attribute1 = new global::System.Xml.Schema.XmlSchemaAttribute(); + attribute1.Name = "namespace"; + attribute1.FixedValue = ds.Namespace; + type.Attributes.Add(attribute1); + global::System.Xml.Schema.XmlSchemaAttribute attribute2 = new global::System.Xml.Schema.XmlSchemaAttribute(); + attribute2.Name = "tableTypeName"; + attribute2.FixedValue = "AssociationDataTable"; + type.Attributes.Add(attribute2); + type.Particle = sequence; + global::System.Xml.Schema.XmlSchema dsSchema = ds.GetSchemaSerializable(); + if (xs.Contains(dsSchema.TargetNamespace)) { + global::System.IO.MemoryStream s1 = new global::System.IO.MemoryStream(); + global::System.IO.MemoryStream s2 = new global::System.IO.MemoryStream(); + try { + global::System.Xml.Schema.XmlSchema schema = null; + dsSchema.Write(s1); + for (global::System.Collections.IEnumerator schemas = xs.Schemas(dsSchema.TargetNamespace).GetEnumerator(); schemas.MoveNext(); ) { + schema = ((global::System.Xml.Schema.XmlSchema)(schemas.Current)); + s2.SetLength(0); + schema.Write(s2); + if ((s1.Length == s2.Length)) { + s1.Position = 0; + s2.Position = 0; + for (; ((s1.Position != s1.Length) + && (s1.ReadByte() == s2.ReadByte())); ) { + ; + } + if ((s1.Position == s1.Length)) { + return type; + } + } + } + } + finally { + if ((s1 != null)) { + s1.Close(); + } + if ((s2 != null)) { + s2.Close(); + } + } + } + xs.Add(dsSchema); + return type; + } + } + + /// <summary> + ///Represents the strongly named DataTable class. + ///</summary> + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")] + [global::System.Serializable()] + [global::System.Xml.Serialization.XmlSchemaProviderAttribute("GetTypedTableSchema")] + public partial class NonceDataTable : global::System.Data.TypedTableBase<NonceRow> { + + private global::System.Data.DataColumn columnCode; + + private global::System.Data.DataColumn columnIssued; + + private global::System.Data.DataColumn columnExpires; + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public NonceDataTable() { + this.TableName = "Nonce"; + this.BeginInit(); + this.InitClass(); + this.EndInit(); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + internal NonceDataTable(global::System.Data.DataTable table) { + this.TableName = table.TableName; + if ((table.CaseSensitive != table.DataSet.CaseSensitive)) { + this.CaseSensitive = table.CaseSensitive; + } + if ((table.Locale.ToString() != table.DataSet.Locale.ToString())) { + this.Locale = table.Locale; + } + if ((table.Namespace != table.DataSet.Namespace)) { + this.Namespace = table.Namespace; + } + this.Prefix = table.Prefix; + this.MinimumCapacity = table.MinimumCapacity; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected NonceDataTable(global::System.Runtime.Serialization.SerializationInfo info, global::System.Runtime.Serialization.StreamingContext context) : + base(info, context) { + this.InitVars(); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public global::System.Data.DataColumn CodeColumn { + get { + return this.columnCode; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public global::System.Data.DataColumn IssuedColumn { + get { + return this.columnIssued; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public global::System.Data.DataColumn ExpiresColumn { + get { + return this.columnExpires; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.ComponentModel.Browsable(false)] + public int Count { + get { + return this.Rows.Count; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public NonceRow this[int index] { + get { + return ((NonceRow)(this.Rows[index])); + } + } + + public event NonceRowChangeEventHandler NonceRowChanging; + + public event NonceRowChangeEventHandler NonceRowChanged; + + public event NonceRowChangeEventHandler NonceRowDeleting; + + public event NonceRowChangeEventHandler NonceRowDeleted; + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public void AddNonceRow(NonceRow row) { + this.Rows.Add(row); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public NonceRow AddNonceRow(string Code, System.DateTime Issued, System.DateTime Expires) { + NonceRow rowNonceRow = ((NonceRow)(this.NewRow())); + object[] columnValuesArray = new object[] { + Code, + Issued, + Expires}; + rowNonceRow.ItemArray = columnValuesArray; + this.Rows.Add(rowNonceRow); + return rowNonceRow; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public NonceRow FindByCode(string Code) { + return ((NonceRow)(this.Rows.Find(new object[] { + Code}))); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public override global::System.Data.DataTable Clone() { + NonceDataTable cln = ((NonceDataTable)(base.Clone())); + cln.InitVars(); + return cln; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override global::System.Data.DataTable CreateInstance() { + return new NonceDataTable(); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + internal void InitVars() { + this.columnCode = base.Columns["Code"]; + this.columnIssued = base.Columns["Issued"]; + this.columnExpires = base.Columns["Expires"]; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + private void InitClass() { + this.columnCode = new global::System.Data.DataColumn("Code", typeof(string), null, global::System.Data.MappingType.Element); + base.Columns.Add(this.columnCode); + this.columnIssued = new global::System.Data.DataColumn("Issued", typeof(global::System.DateTime), null, global::System.Data.MappingType.Element); + base.Columns.Add(this.columnIssued); + this.columnExpires = new global::System.Data.DataColumn("Expires", typeof(global::System.DateTime), null, global::System.Data.MappingType.Element); + base.Columns.Add(this.columnExpires); + this.Constraints.Add(new global::System.Data.UniqueConstraint("PrimaryKey", new global::System.Data.DataColumn[] { + this.columnCode}, true)); + this.columnCode.AllowDBNull = false; + this.columnCode.Unique = true; + this.columnIssued.AllowDBNull = false; + this.columnExpires.AllowDBNull = false; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public NonceRow NewNonceRow() { + return ((NonceRow)(this.NewRow())); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override global::System.Data.DataRow NewRowFromBuilder(global::System.Data.DataRowBuilder builder) { + return new NonceRow(builder); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override global::System.Type GetRowType() { + return typeof(NonceRow); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override void OnRowChanged(global::System.Data.DataRowChangeEventArgs e) { + base.OnRowChanged(e); + if ((this.NonceRowChanged != null)) { + this.NonceRowChanged(this, new NonceRowChangeEvent(((NonceRow)(e.Row)), e.Action)); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override void OnRowChanging(global::System.Data.DataRowChangeEventArgs e) { + base.OnRowChanging(e); + if ((this.NonceRowChanging != null)) { + this.NonceRowChanging(this, new NonceRowChangeEvent(((NonceRow)(e.Row)), e.Action)); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override void OnRowDeleted(global::System.Data.DataRowChangeEventArgs e) { + base.OnRowDeleted(e); + if ((this.NonceRowDeleted != null)) { + this.NonceRowDeleted(this, new NonceRowChangeEvent(((NonceRow)(e.Row)), e.Action)); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + protected override void OnRowDeleting(global::System.Data.DataRowChangeEventArgs e) { + base.OnRowDeleting(e); + if ((this.NonceRowDeleting != null)) { + this.NonceRowDeleting(this, new NonceRowChangeEvent(((NonceRow)(e.Row)), e.Action)); + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public void RemoveNonceRow(NonceRow row) { + this.Rows.Remove(row); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public static global::System.Xml.Schema.XmlSchemaComplexType GetTypedTableSchema(global::System.Xml.Schema.XmlSchemaSet xs) { + global::System.Xml.Schema.XmlSchemaComplexType type = new global::System.Xml.Schema.XmlSchemaComplexType(); + global::System.Xml.Schema.XmlSchemaSequence sequence = new global::System.Xml.Schema.XmlSchemaSequence(); + CustomStoreDataSet ds = new CustomStoreDataSet(); + global::System.Xml.Schema.XmlSchemaAny any1 = new global::System.Xml.Schema.XmlSchemaAny(); + any1.Namespace = "http://www.w3.org/2001/XMLSchema"; + any1.MinOccurs = new decimal(0); + any1.MaxOccurs = decimal.MaxValue; + any1.ProcessContents = global::System.Xml.Schema.XmlSchemaContentProcessing.Lax; + sequence.Items.Add(any1); + global::System.Xml.Schema.XmlSchemaAny any2 = new global::System.Xml.Schema.XmlSchemaAny(); + any2.Namespace = "urn:schemas-microsoft-com:xml-diffgram-v1"; + any2.MinOccurs = new decimal(1); + any2.ProcessContents = global::System.Xml.Schema.XmlSchemaContentProcessing.Lax; + sequence.Items.Add(any2); + global::System.Xml.Schema.XmlSchemaAttribute attribute1 = new global::System.Xml.Schema.XmlSchemaAttribute(); + attribute1.Name = "namespace"; + attribute1.FixedValue = ds.Namespace; + type.Attributes.Add(attribute1); + global::System.Xml.Schema.XmlSchemaAttribute attribute2 = new global::System.Xml.Schema.XmlSchemaAttribute(); + attribute2.Name = "tableTypeName"; + attribute2.FixedValue = "NonceDataTable"; + type.Attributes.Add(attribute2); + type.Particle = sequence; + global::System.Xml.Schema.XmlSchema dsSchema = ds.GetSchemaSerializable(); + if (xs.Contains(dsSchema.TargetNamespace)) { + global::System.IO.MemoryStream s1 = new global::System.IO.MemoryStream(); + global::System.IO.MemoryStream s2 = new global::System.IO.MemoryStream(); + try { + global::System.Xml.Schema.XmlSchema schema = null; + dsSchema.Write(s1); + for (global::System.Collections.IEnumerator schemas = xs.Schemas(dsSchema.TargetNamespace).GetEnumerator(); schemas.MoveNext(); ) { + schema = ((global::System.Xml.Schema.XmlSchema)(schemas.Current)); + s2.SetLength(0); + schema.Write(s2); + if ((s1.Length == s2.Length)) { + s1.Position = 0; + s2.Position = 0; + for (; ((s1.Position != s1.Length) + && (s1.ReadByte() == s2.ReadByte())); ) { + ; + } + if ((s1.Position == s1.Length)) { + return type; + } + } + } + } + finally { + if ((s1 != null)) { + s1.Close(); + } + if ((s2 != null)) { + s2.Close(); + } + } + } + xs.Add(dsSchema); + return type; + } + } + + /// <summary> + ///Represents strongly named DataRow class. + ///</summary> + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")] + public partial class AssociationRow : global::System.Data.DataRow { + + private AssociationDataTable tableAssociation; + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + internal AssociationRow(global::System.Data.DataRowBuilder rb) : + base(rb) { + this.tableAssociation = ((AssociationDataTable)(this.Table)); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public string DistinguishingFactor { + get { + return ((string)(this[this.tableAssociation.DistinguishingFactorColumn])); + } + set { + this[this.tableAssociation.DistinguishingFactorColumn] = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public string Handle { + get { + return ((string)(this[this.tableAssociation.HandleColumn])); + } + set { + this[this.tableAssociation.HandleColumn] = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public System.DateTime Expires { + get { + return ((global::System.DateTime)(this[this.tableAssociation.ExpiresColumn])); + } + set { + this[this.tableAssociation.ExpiresColumn] = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public byte[] PrivateData { + get { + return ((byte[])(this[this.tableAssociation.PrivateDataColumn])); + } + set { + this[this.tableAssociation.PrivateDataColumn] = value; + } + } + } + + /// <summary> + ///Represents strongly named DataRow class. + ///</summary> + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")] + public partial class NonceRow : global::System.Data.DataRow { + + private NonceDataTable tableNonce; + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + internal NonceRow(global::System.Data.DataRowBuilder rb) : + base(rb) { + this.tableNonce = ((NonceDataTable)(this.Table)); + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public string Code { + get { + return ((string)(this[this.tableNonce.CodeColumn])); + } + set { + this[this.tableNonce.CodeColumn] = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public System.DateTime Issued { + get { + return ((global::System.DateTime)(this[this.tableNonce.IssuedColumn])); + } + set { + this[this.tableNonce.IssuedColumn] = value; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public System.DateTime Expires { + get { + return ((global::System.DateTime)(this[this.tableNonce.ExpiresColumn])); + } + set { + this[this.tableNonce.ExpiresColumn] = value; + } + } + } + + /// <summary> + ///Row event argument class + ///</summary> + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")] + public class AssociationRowChangeEvent : global::System.EventArgs { + + private AssociationRow eventRow; + + private global::System.Data.DataRowAction eventAction; + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public AssociationRowChangeEvent(AssociationRow row, global::System.Data.DataRowAction action) { + this.eventRow = row; + this.eventAction = action; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public AssociationRow Row { + get { + return this.eventRow; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public global::System.Data.DataRowAction Action { + get { + return this.eventAction; + } + } + } + + /// <summary> + ///Row event argument class + ///</summary> + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Data.Design.TypedDataSetGenerator", "2.0.0.0")] + public class NonceRowChangeEvent : global::System.EventArgs { + + private NonceRow eventRow; + + private global::System.Data.DataRowAction eventAction; + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public NonceRowChangeEvent(NonceRow row, global::System.Data.DataRowAction action) { + this.eventRow = row; + this.eventAction = action; + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public NonceRow Row { + get { + return this.eventRow; + } + } + + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + public global::System.Data.DataRowAction Action { + get { + return this.eventAction; + } + } + } + } +} + +#pragma warning restore 1591
\ No newline at end of file diff --git a/samples/RelyingPartyWebForms/Code/State.cs b/samples/RelyingPartyWebForms/Code/State.cs new file mode 100644 index 0000000..857e02a --- /dev/null +++ b/samples/RelyingPartyWebForms/Code/State.cs @@ -0,0 +1,32 @@ +namespace RelyingPartyWebForms { + using System.Collections.Generic; + using System.Web; + using DotNetOpenAuth.OpenId.Extensions.ProviderAuthenticationPolicy; + using DotNetOpenAuth.OpenId.Extensions.SimpleRegistration; + + /// <summary> + /// Strong-typed bag of session state. + /// </summary> + public class State { + public static ClaimsResponse ProfileFields { + get { return HttpContext.Current.Session["ProfileFields"] as ClaimsResponse; } + set { HttpContext.Current.Session["ProfileFields"] = value; } + } + + public static string FriendlyLoginName { + get { return HttpContext.Current.Session["FriendlyUsername"] as string; } + set { HttpContext.Current.Session["FriendlyUsername"] = value; } + } + + public static PolicyResponse PapePolicies { + get { return HttpContext.Current.Session["PapePolicies"] as PolicyResponse; } + set { HttpContext.Current.Session["PapePolicies"] = value; } + } + + public static void Clear() { + ProfileFields = null; + FriendlyLoginName = null; + PapePolicies = null; + } + } +}
\ No newline at end of file diff --git a/samples/RelyingPartyWebForms/Code/TracePageAppender.cs b/samples/RelyingPartyWebForms/Code/TracePageAppender.cs new file mode 100644 index 0000000..e6e453a --- /dev/null +++ b/samples/RelyingPartyWebForms/Code/TracePageAppender.cs @@ -0,0 +1,13 @@ +namespace RelyingPartyWebForms { + using System; + using System.Collections.Generic; + using System.IO; + using System.Web; + + public class TracePageAppender : log4net.Appender.AppenderSkeleton { + protected override void Append(log4net.Core.LoggingEvent loggingEvent) { + StringWriter sw = new StringWriter(Global.LogMessages); + Layout.Format(sw, loggingEvent); + } + } +} diff --git a/samples/RelyingPartyWebForms/Default.aspx b/samples/RelyingPartyWebForms/Default.aspx new file mode 100644 index 0000000..602d5ed --- /dev/null +++ b/samples/RelyingPartyWebForms/Default.aspx @@ -0,0 +1,13 @@ +<%@ Page Language="C#" AutoEventWireup="true" MasterPageFile="~/Site.Master" %> + +<%@ Register Assembly="DotNetOpenAuth" Namespace="DotNetOpenAuth" TagPrefix="openid" %> +<asp:Content runat="server" ContentPlaceHolderID="head"> + <openid:XrdsPublisher ID="XrdsPublisher1" runat="server" XrdsUrl="~/xrds.aspx" /> +</asp:Content> +<asp:Content runat="server" ContentPlaceHolderID="main"> + <h2>Relying Party </h2> + <p>Visit the + <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="~/MembersOnly/Default.aspx" + Text="Members Only" /> + area. (This will trigger a login demo). </p> +</asp:Content> diff --git a/samples/RelyingPartyWebForms/Global.asax b/samples/RelyingPartyWebForms/Global.asax new file mode 100644 index 0000000..3882feb --- /dev/null +++ b/samples/RelyingPartyWebForms/Global.asax @@ -0,0 +1 @@ +<%@ Application Codebehind="Global.asax.cs" Inherits="RelyingPartyWebForms.Global" Language="C#" %> diff --git a/samples/RelyingPartyWebForms/Global.asax.cs b/samples/RelyingPartyWebForms/Global.asax.cs new file mode 100644 index 0000000..91cfd9a --- /dev/null +++ b/samples/RelyingPartyWebForms/Global.asax.cs @@ -0,0 +1,65 @@ +namespace RelyingPartyWebForms { + using System; + using System.Collections.Specialized; + using System.IO; + using System.Text; + using System.Web; + + public class Global : HttpApplication { + public static log4net.ILog Logger = log4net.LogManager.GetLogger(typeof(Global)); + + internal static StringBuilder LogMessages = new StringBuilder(); + + public static string ToString(NameValueCollection collection) { + using (StringWriter sw = new StringWriter()) { + foreach (string key in collection.Keys) { + if (key.StartsWith("__")) { + continue; // skip + } + sw.WriteLine("{0} = '{1}'", key, collection[key]); + } + return sw.ToString(); + } + } + + protected void Application_Start(object sender, EventArgs e) { + log4net.Config.XmlConfigurator.Configure(); + Logger.Info("Sample starting..."); + } + + protected void Application_End(object sender, EventArgs e) { + Logger.Info("Sample shutting down..."); + + // this would be automatic, but in partial trust scenarios it is not. + log4net.LogManager.Shutdown(); + } + + protected void Application_BeginRequest(object sender, EventArgs e) { + // System.Diagnostics.Debugger.Launch(); + Logger.DebugFormat("Processing {0} on {1} ", Request.HttpMethod, this.stripQueryString(Request.Url)); + if (Request.QueryString.Count > 0) { + Logger.DebugFormat("Querystring follows: \n{0}", ToString(Request.QueryString)); + } + if (Request.Form.Count > 0) { + Logger.DebugFormat("Posted form follows: \n{0}", ToString(Request.Form)); + } + } + + protected void Application_AuthenticateRequest(object sender, EventArgs e) { + Logger.DebugFormat("User {0} authenticated.", HttpContext.Current.User != null ? "IS" : "is NOT"); + } + + protected void Application_EndRequest(object sender, EventArgs e) { + } + + protected void Application_Error(object sender, EventArgs e) { + Logger.ErrorFormat("An unhandled exception was raised. Details follow: {0}", HttpContext.Current.Server.GetLastError()); + } + + private string stripQueryString(Uri uri) { + UriBuilder builder = new UriBuilder(uri); + builder.Query = null; + return builder.ToString(); + } + } +}
\ No newline at end of file diff --git a/samples/RelyingPartyWebForms/MembersOnly/Default.aspx b/samples/RelyingPartyWebForms/MembersOnly/Default.aspx new file mode 100644 index 0000000..cdfbc09 --- /dev/null +++ b/samples/RelyingPartyWebForms/MembersOnly/Default.aspx @@ -0,0 +1,106 @@ +<%@ Page Language="C#" AutoEventWireup="true" MasterPageFile="~/Site.Master" %> +<%@ Import Namespace="RelyingPartyWebForms" %> + +<asp:Content ID="Content1" runat="server" ContentPlaceHolderID="Main"> + <h2> + Members Only Area + </h2> + <p> + Congratulations, <b><asp:LoginName ID="LoginName1" runat="server" /></b>. + You have completed the OpenID login process. + </p> + +<% if (State.PapePolicies != null) { %> + <p>A PAPE extension was included in the authentication with this content: </p> + <ul> + <% if (State.PapePolicies.NistAssuranceLevel != null) {%> + <li>Nist: <%=HttpUtility.HtmlEncode(State.PapePolicies.NistAssuranceLevel.Value.ToString())%></li> + <% } + foreach (string policy in State.PapePolicies.ActualPolicies) { %> + <li><%=HttpUtility.HtmlEncode(policy) %></li> + <% } %> + </ul> +<% } %> + +<% if (State.ProfileFields != null) { %> + <p> + In addition to authenticating you, your OpenID Provider may + have told us something about you using the + Simple Registration extension: + </p> + <table id="profileFieldsTable" runat="server"> + <tr> + <td> + Nickname + </td> + <td> + <%=State.ProfileFields.Nickname %> + </td> + </tr> + <tr> + <td> + Email + </td> + <td> + <%=State.ProfileFields.Email%> + </td> + </tr> + <tr> + <td> + FullName + </td> + <td> + <%=State.ProfileFields.FullName%> + </td> + </tr> + <tr> + <td> + Date of Birth + </td> + <td> + <%=State.ProfileFields.BirthDate.ToString()%> + </td> + </tr> + <tr> + <td> + Gender + </td> + <td> + <%=State.ProfileFields.Gender.ToString()%> + </td> + </tr> + <tr> + <td> + Post Code + </td> + <td> + <%=State.ProfileFields.PostalCode%> + </td> + </tr> + <tr> + <td> + Country + </td> + <td> + <%=State.ProfileFields.Country%> + </td> + </tr> + <tr> + <td> + Language + </td> + <td> + <%=State.ProfileFields.Language%> + </td> + </tr> + <tr> + <td> + Timezone + </td> + <td> + <%=State.ProfileFields.TimeZone%> + </td> + </tr> + </table> +<% } %> +</asp:Content> diff --git a/samples/RelyingPartyWebForms/MembersOnly/Web.config b/samples/RelyingPartyWebForms/MembersOnly/Web.config new file mode 100644 index 0000000..3cfad05 --- /dev/null +++ b/samples/RelyingPartyWebForms/MembersOnly/Web.config @@ -0,0 +1,18 @@ +<?xml version="1.0"?> +<!-- + Note: As an alternative to hand editing this file you can use the + web admin tool to configure settings for your application. Use + the Website->Asp.Net Configuration option in Visual Studio. + A full list of settings and comments can be found in + machine.config.comments usually located in + \Windows\Microsoft.Net\Framework\v2.x\Config +--> +<configuration> + <appSettings/> + <connectionStrings/> + <system.web> + <authorization> + <deny users="?"/> + </authorization> + </system.web> +</configuration> diff --git a/samples/RelyingPartyWebForms/PrivacyPolicy.aspx b/samples/RelyingPartyWebForms/PrivacyPolicy.aspx new file mode 100644 index 0000000..e99112e --- /dev/null +++ b/samples/RelyingPartyWebForms/PrivacyPolicy.aspx @@ -0,0 +1,7 @@ +<%@ Page Language="C#" AutoEventWireup="true" MasterPageFile="~/Site.Master" %> +<asp:Content ID="Content1" runat="server" ContentPlaceHolderID="Main"> + <h2>Privacy Policy</h2> + <p> + Some privacy policy would go here. + </p> +</asp:Content>
\ No newline at end of file diff --git a/samples/RelyingPartyWebForms/Properties/AssemblyInfo.cs b/samples/RelyingPartyWebForms/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..6411677 --- /dev/null +++ b/samples/RelyingPartyWebForms/Properties/AssemblyInfo.cs @@ -0,0 +1,35 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("RelyingPartyWebForms sample")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("DotNetOpenAuth")] +[assembly: AssemblyCopyright("Copyright © 2009")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("3d5900ae-111a-45be-96b3-d9e4606ca793")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: +[assembly: AssemblyVersion("0.2.0.0")] +[assembly: AssemblyFileVersion("0.2.0.0")] diff --git a/samples/RelyingPartyWebForms/RelyingPartyWebForms.csproj b/samples/RelyingPartyWebForms/RelyingPartyWebForms.csproj new file mode 100644 index 0000000..3f2d2a2 --- /dev/null +++ b/samples/RelyingPartyWebForms/RelyingPartyWebForms.csproj @@ -0,0 +1,187 @@ +<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <PropertyGroup> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <ProductVersion>9.0.30729</ProductVersion> + <SchemaVersion>2.0</SchemaVersion> + <ProjectGuid>{1E8AEA89-BF69-47A1-B290-E8B0FE588700}</ProjectGuid> + <ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids> + <OutputType>Library</OutputType> + <AppDesignerFolder>Properties</AppDesignerFolder> + <RootNamespace>RelyingPartyWebForms</RootNamespace> + <AssemblyName>RelyingPartyWebForms</AssemblyName> + <TargetFrameworkVersion>v3.5</TargetFrameworkVersion> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> + <DebugSymbols>true</DebugSymbols> + <DebugType>full</DebugType> + <Optimize>false</Optimize> + <OutputPath>bin\</OutputPath> + <DefineConstants>DEBUG;TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> + <DebugType>pdbonly</DebugType> + <Optimize>true</Optimize> + <OutputPath>bin\</OutputPath> + <DefineConstants>TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + </PropertyGroup> + <ItemGroup> + <Reference Include="log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821, processorArchitecture=MSIL"> + <SpecificVersion>False</SpecificVersion> + <HintPath>..\..\lib\log4net.dll</HintPath> + </Reference> + <Reference Include="System" /> + <Reference Include="System.Data" /> + <Reference Include="System.Core"> + <RequiredTargetFramework>3.5</RequiredTargetFramework> + </Reference> + <Reference Include="System.Data.DataSetExtensions"> + <RequiredTargetFramework>3.5</RequiredTargetFramework> + </Reference> + <Reference Include="System.Web.Extensions"> + <RequiredTargetFramework>3.5</RequiredTargetFramework> + </Reference> + <Reference Include="System.Xml.Linq"> + <RequiredTargetFramework>3.5</RequiredTargetFramework> + </Reference> + <Reference Include="System.Drawing" /> + <Reference Include="System.Web" /> + <Reference Include="System.Xml" /> + <Reference Include="System.Configuration" /> + <Reference Include="System.Web.Services" /> + <Reference Include="System.EnterpriseServices" /> + <Reference Include="System.Web.Mobile" /> + </ItemGroup> + <ItemGroup> + <Content Include="Default.aspx" /> + <Content Include="Global.asax" /> + <Content Include="login.aspx" /> + <Content Include="loginProgrammatic.aspx" /> + <Content Include="logout.aspx" /> + <Content Include="PrivacyPolicy.aspx" /> + <Content Include="styles.css" /> + <Content Include="TracePage.aspx" /> + <Content Include="Web.config" /> + </ItemGroup> + <ItemGroup> + <Compile Include="ajaxlogin.aspx.cs"> + <DependentUpon>ajaxlogin.aspx</DependentUpon> + <SubType>ASPXCodeBehind</SubType> + </Compile> + <Compile Include="ajaxlogin.aspx.designer.cs"> + <DependentUpon>ajaxlogin.aspx</DependentUpon> + </Compile> + <Compile Include="Code\CustomStore.cs" /> + <Compile Include="Code\CustomStoreDataSet.cs"> + <DependentUpon>CustomStoreDataSet.xsd</DependentUpon> + <SubType>Component</SubType> + </Compile> + <Compile Include="Code\CustomStoreDataSet.Designer.cs"> + <DependentUpon>CustomStoreDataSet.cs</DependentUpon> + </Compile> + <Compile Include="Code\CustomStoreDataSet1.Designer.cs"> + <AutoGen>True</AutoGen> + <DesignTime>True</DesignTime> + <DependentUpon>CustomStoreDataSet.xsd</DependentUpon> + </Compile> + <Compile Include="Code\State.cs" /> + <Compile Include="Code\TracePageAppender.cs" /> + <Compile Include="Global.asax.cs"> + <DependentUpon>Global.asax</DependentUpon> + </Compile> + <Compile Include="login.aspx.cs"> + <DependentUpon>login.aspx</DependentUpon> + <SubType>ASPXCodeBehind</SubType> + </Compile> + <Compile Include="login.aspx.designer.cs"> + <DependentUpon>login.aspx</DependentUpon> + </Compile> + <Compile Include="loginProgrammatic.aspx.cs"> + <DependentUpon>loginProgrammatic.aspx</DependentUpon> + <SubType>ASPXCodeBehind</SubType> + </Compile> + <Compile Include="loginProgrammatic.aspx.designer.cs"> + <DependentUpon>loginProgrammatic.aspx</DependentUpon> + </Compile> + <Compile Include="m\Login.aspx.cs"> + <DependentUpon>Login.aspx</DependentUpon> + <SubType>ASPXCodeBehind</SubType> + </Compile> + <Compile Include="m\Login.aspx.designer.cs"> + <DependentUpon>Login.aspx</DependentUpon> + </Compile> + <Compile Include="Properties\AssemblyInfo.cs" /> + <Compile Include="TracePage.aspx.cs"> + <DependentUpon>TracePage.aspx</DependentUpon> + <SubType>ASPXCodeBehind</SubType> + </Compile> + <Compile Include="TracePage.aspx.designer.cs"> + <DependentUpon>TracePage.aspx</DependentUpon> + </Compile> + </ItemGroup> + <ItemGroup> + <Content Include="ajaxlogin.aspx" /> + <Content Include="MembersOnly\Default.aspx" /> + <Content Include="Site.Master" /> + <Content Include="xrds.aspx" /> + </ItemGroup> + <ItemGroup> + <Content Include="images\attention.png" /> + <Content Include="images\dotnetopenid_tiny.gif" /> + <Content Include="images\openid_login.gif" /> + <Content Include="images\yahoo.png" /> + <Content Include="MembersOnly\Web.config" /> + <Content Include="m\Login.aspx" /> + </ItemGroup> + <ItemGroup> + <None Include="Code\CustomStoreDataSet.xsc"> + <DependentUpon>CustomStoreDataSet.xsd</DependentUpon> + </None> + <None Include="Code\CustomStoreDataSet.xsd"> + <Generator>MSDataSetGenerator</Generator> + <LastGenOutput>CustomStoreDataSet1.Designer.cs</LastGenOutput> + <SubType>Designer</SubType> + </None> + <None Include="Code\CustomStoreDataSet.xss"> + <DependentUpon>CustomStoreDataSet.xsd</DependentUpon> + </None> + </ItemGroup> + <ItemGroup> + <ProjectReference Include="..\..\src\DotNetOpenAuth\DotNetOpenAuth.csproj"> + <Project>{3191B653-F76D-4C1A-9A5A-347BC3AAAAB7}</Project> + <Name>DotNetOpenAuth</Name> + </ProjectReference> + </ItemGroup> + <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> + <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v9.0\WebApplications\Microsoft.WebApplication.targets" /> + <!-- To modify your build process, add your task inside one of the targets below and uncomment it. + Other similar extension points exist, see Microsoft.Common.targets. + <Target Name="BeforeBuild"> + </Target> + <Target Name="AfterBuild"> + </Target> + --> + <ProjectExtensions> + <VisualStudio> + <FlavorProperties GUID="{349c5851-65df-11da-9384-00065b846f21}"> + <WebProjectProperties> + <UseIIS>False</UseIIS> + <AutoAssignPort>True</AutoAssignPort> + <DevelopmentServerPort>49521</DevelopmentServerPort> + <DevelopmentServerVPath>/</DevelopmentServerVPath> + <IISUrl> + </IISUrl> + <NTLMAuthentication>False</NTLMAuthentication> + <UseCustomServer>False</UseCustomServer> + <CustomServerUrl> + </CustomServerUrl> + <SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile> + </WebProjectProperties> + </FlavorProperties> + </VisualStudio> + </ProjectExtensions> +</Project>
\ No newline at end of file diff --git a/samples/RelyingPartyWebForms/Settings.StyleCop b/samples/RelyingPartyWebForms/Settings.StyleCop new file mode 100644 index 0000000..7f55ce6 --- /dev/null +++ b/samples/RelyingPartyWebForms/Settings.StyleCop @@ -0,0 +1 @@ +<StyleCopSettings Version="4.3" />
\ No newline at end of file diff --git a/samples/RelyingPartyWebForms/Site.Master b/samples/RelyingPartyWebForms/Site.Master new file mode 100644 index 0000000..c9077c1 --- /dev/null +++ b/samples/RelyingPartyWebForms/Site.Master @@ -0,0 +1,39 @@ +<%@ Master Language="C#" AutoEventWireup="true" %> +<%@ Import Namespace="RelyingPartyWebForms" %> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> + +<script runat="server"> + protected void Page_Load(object sender, EventArgs e) { + friendlyUsername.Text = State.FriendlyLoginName; + } + + protected void LoginStatus1_LoggedOut(object sender, EventArgs e) { + State.Clear(); + } +</script> + +<html xmlns="http://www.w3.org/1999/xhtml"> +<head runat="server"> + <title>OpenID Relying Party, by DotNetOpenId</title> + <link href="styles.css" rel="stylesheet" type="text/css" /> + <asp:ContentPlaceHolder ID="head" runat="server" /> +</head> +<body> + <form id="form1" runat="server"> + <span style="float: right"> + <asp:Image runat="server" ID="openIdUsernameImage" ImageUrl="~/images/openid_login.gif" + EnableViewState="false" /> + <asp:Label runat="server" ID="friendlyUsername" Text="" EnableViewState="false" /> + <asp:LoginStatus ID="LoginStatus1" runat="server" OnLoggedOut="LoginStatus1_LoggedOut" /> + </span> + <div> + <a href="http://dotnetopenid.googlecode.com"> + <img runat="server" src="~/images/dotnetopenid_tiny.gif" title="Jump to the project web site." + alt="DotNetOpenId" border='0' /></a> + </div> + <div> + <asp:ContentPlaceHolder ID="Main" runat="server" /> + </div> + </form> +</body> +</html> diff --git a/samples/RelyingPartyWebForms/TracePage.aspx b/samples/RelyingPartyWebForms/TracePage.aspx new file mode 100644 index 0000000..2df425f --- /dev/null +++ b/samples/RelyingPartyWebForms/TracePage.aspx @@ -0,0 +1,16 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="TracePage.aspx.cs" Inherits="RelyingPartyWebForms.TracePage" %> + +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head runat="server"> + <title></title> +</head> +<body> + <form id="form1" runat="server"> + <p align="right"> + <asp:Button runat="server" Text="Clear log" ID="clearLogButton" OnClick="clearLogButton_Click" /> + </p> + <pre><asp:PlaceHolder runat="server" ID="placeHolder1" /></pre> + </form> +</body> +</html> diff --git a/samples/RelyingPartyWebForms/TracePage.aspx.cs b/samples/RelyingPartyWebForms/TracePage.aspx.cs new file mode 100644 index 0000000..799e99a --- /dev/null +++ b/samples/RelyingPartyWebForms/TracePage.aspx.cs @@ -0,0 +1,20 @@ +namespace RelyingPartyWebForms { + using System; + using System.Collections.Generic; + using System.Web; + using System.Web.UI; + using System.Web.UI.WebControls; + + public partial class TracePage : System.Web.UI.Page { + protected void Page_Load(object sender, EventArgs e) { + this.placeHolder1.Controls.Add(new Label { Text = Global.LogMessages.ToString() }); + } + + protected void clearLogButton_Click(object sender, EventArgs e) { + Global.LogMessages.Length = 0; + + // clear the page immediately, and allow for F5 without a Postback warning. + this.Response.Redirect(this.Request.Url.AbsoluteUri); + } + } +} diff --git a/samples/RelyingPartyWebForms/TracePage.aspx.designer.cs b/samples/RelyingPartyWebForms/TracePage.aspx.designer.cs new file mode 100644 index 0000000..7755a2c --- /dev/null +++ b/samples/RelyingPartyWebForms/TracePage.aspx.designer.cs @@ -0,0 +1,43 @@ +//------------------------------------------------------------------------------ +// <auto-generated> +// This code was generated by a tool. +// Runtime Version:2.0.50727.3521 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// </auto-generated> +//------------------------------------------------------------------------------ + +namespace RelyingPartyWebForms { + + + public partial class TracePage { + + /// <summary> + /// form1 control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.HtmlControls.HtmlForm form1; + + /// <summary> + /// clearLogButton control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.Button clearLogButton; + + /// <summary> + /// placeHolder1 control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.PlaceHolder placeHolder1; + } +} diff --git a/samples/RelyingPartyWebForms/Web.config b/samples/RelyingPartyWebForms/Web.config new file mode 100644 index 0000000..2f2e7bb --- /dev/null +++ b/samples/RelyingPartyWebForms/Web.config @@ -0,0 +1,81 @@ +<?xml version="1.0"?> +<configuration> + <configSections> + <section name="uri" type="System.Configuration.UriSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> + <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler" requirePermission="false" /> + <section name="dotNetOpenAuth" type="DotNetOpenAuth.Configuration.DotNetOpenAuthSection" requirePermission="false" allowLocation="true"/> + </configSections> + + <!-- this is an optional configuration section where aspects of dotnetopenauth can be customized --> + <dotNetOpenAuth> + <openid> + <relyingParty> + <security requireSsl="false" /> + <!-- Uncomment the following to activate the sample custom store. --> + <!--<store type="RelyingPartyWebForms.CustomStore, RelyingPartyWebForms" />--> + </relyingParty> + </openid> + <messaging> + <untrustedWebRequest> + <whitelistHosts> + <!-- since this is a sample, and will often be used with localhost --> + <add name="localhost" /> + </whitelistHosts> + </untrustedWebRequest> + </messaging> + </dotNetOpenAuth> + + <!-- The uri section is necessary to turn on .NET 3.5 support for IDN (international domain names), + which is necessary for OpenID urls with unicode characters in the domain/host name. --> + <uri> + <idn enabled="All" /> + <iriParsing enabled="true" /> + </uri> + + <system.web> + <!--<sessionState cookieless="true" />--> + <compilation debug="true"/> + <customErrors mode="RemoteOnly"/> + <authentication mode="Forms"> + <forms name="RelyingPartySession"/> <!-- named cookie prevents conflicts with other samples --> + </authentication> + <trace enabled="false" writeToDiagnosticsTrace="true" /> + <!-- Trust level discussion: + Full: everything works + High: TRACE compilation symbol must NOT be defined + Medium/Low: doesn't work on default machine.config, because WebPermission.Connect is denied. + --> + <trust level="High" originUrl=""/> + </system.web> + + <!-- log4net is a 3rd party (free) logger library that dotnetopenid will use if present but does not require. --> + <log4net> + <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> + <file value="RelyingParty.log" /> + <appendToFile value="true" /> + <rollingStyle value="Size" /> + <maxSizeRollBackups value="10" /> + <maximumFileSize value="100KB" /> + <staticLogFileName value="true" /> + <layout type="log4net.Layout.PatternLayout"> + <conversionPattern value="%date (GMT%date{%z}) [%thread] %-5level %logger - %message%newline" /> + </layout> + </appender> + <appender name="TracePageAppender" type="RelyingPartyWebForms.TracePageAppender, RelyingPartyWebForms"> + <layout type="log4net.Layout.PatternLayout"> + <conversionPattern value="%date (GMT%date{%z}) [%thread] %-5level %logger - %message%newline" /> + </layout> + </appender> + <!-- Setup the root category, add the appenders and set the default level --> + <root> + <level value="INFO" /> + <!--<appender-ref ref="RollingFileAppender" />--> + <appender-ref ref="TracePageAppender" /> + </root> + <!-- Specify the level for some specific categories --> + <logger name="DotNetOpenAuth"> + <level value="ALL" /> + </logger> + </log4net> + +</configuration> diff --git a/samples/RelyingPartyWebForms/ajaxlogin.aspx b/samples/RelyingPartyWebForms/ajaxlogin.aspx new file mode 100644 index 0000000..a44bf52 --- /dev/null +++ b/samples/RelyingPartyWebForms/ajaxlogin.aspx @@ -0,0 +1,91 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ajaxlogin.aspx.cs" Inherits="RelyingPartyWebForms.ajaxlogin" + ValidateRequest="false" MasterPageFile="~/Site.Master" %> + +<%@ Register Assembly="DotNetOpenAuth" Namespace="DotNetOpenAuth.OpenId.RelyingParty" TagPrefix="openid" %> +<asp:Content runat="server" ContentPlaceHolderID="head"> +<style type="text/css"> +.textbox +{ + width: 200px; +} +.openidtextbox +{ + width: 185px; +} +td +{ + vertical-align: top; +} +</style> +</asp:Content> + +<asp:Content runat="server" ContentPlaceHolderID="Main"> +<script type="text/javascript"> + function onauthenticated(sender) { + var emailBox = document.getElementById('<%= emailAddressBox.ClientID %>'); + emailBox.disabled = false; + emailBox.title = null; // remove tooltip describing why the box was disabled. + // the sreg response may not always be included. + if (sender.sreg) { + // and the email field may not always be included in the sreg response. + if (sender.sreg.email) { emailBox.value = sender.sreg.email; } + } + } +</script> + + <asp:MultiView runat="server" ID="multiView" ActiveViewIndex='0'> + <asp:View runat="server" ID="commentSubmission"> + <table> + <tr> + <td> + OpenID + </td> + <td> + <openid:OpenIdAjaxTextBox ID="OpenIdAjaxTextBox1" runat="server" CssClass="openidtextbox" + OnLoggingIn="OpenIdAjaxTextBox1_LoggingIn" + OnLoggedIn="OpenIdAjaxTextBox1_LoggedIn" + OnClientAssertionReceived="onauthenticated(sender)" + OnUnconfirmedPositiveAssertion="OpenIdAjaxTextBox1_UnconfirmedPositiveAssertion" /> + <asp:RequiredFieldValidator ID="openidRequiredValidator" runat="server" + ControlToValidate="OpenIdAjaxTextBox1" ValidationGroup="openidVG" + ErrorMessage="The OpenID field is required." SetFocusOnError="True"> + <asp:Image runat="server" ImageUrl="~/images/attention.png" ToolTip="This is a required field" /> + </asp:RequiredFieldValidator> + </td> + </tr> + <tr> + <td> + Email + </td> + <td> + <asp:TextBox runat="server" ID="emailAddressBox" Enabled="false" CssClass="textbox" ToolTip="This field will be enabled after you log in with your OpenID." /> + </td> + </tr> + <tr> + <td> + Comments + </td> + <td> + <asp:TextBox runat="server" ID="commentsBox" TextMode="MultiLine" Rows="5" CssClass="textbox" /> + </td> + </tr> + <tr> + <td /> + <td> + <asp:Button runat="server" Text="Submit" ID="submitButton" OnClick="submitButton_Click" /> + </td> + </tr> + </table> + </asp:View> + <asp:View runat="server" ID="commentSubmitted"> + <p>Congratulations, + <asp:Label runat="server" ID="emailLabel" />! Your comment was received (and discarded... + this is just a demo after all).</p> + <asp:LinkButton runat="server" Text="Go back and change something in the comment" + OnClick="editComment_Click" /> + </asp:View> + <asp:View runat="server" ID="commentFailed"> + <p>Your comment submission failed.</p> + </asp:View> + </asp:MultiView> +</asp:Content> diff --git a/samples/RelyingPartyWebForms/ajaxlogin.aspx.cs b/samples/RelyingPartyWebForms/ajaxlogin.aspx.cs new file mode 100644 index 0000000..4024e59 --- /dev/null +++ b/samples/RelyingPartyWebForms/ajaxlogin.aspx.cs @@ -0,0 +1,56 @@ +namespace RelyingPartyWebForms { + using System; + using System.Web.UI.WebControls; + using DotNetOpenAuth.OpenId.Extensions.SimpleRegistration; + using DotNetOpenAuth.OpenId.RelyingParty; + + public partial class ajaxlogin : System.Web.UI.Page { + protected void Page_Load(object sender, EventArgs e) { + if (!IsPostBack) { + this.OpenIdAjaxTextBox1.Focus(); + } + } + + protected void OpenIdAjaxTextBox1_LoggingIn(object sender, OpenIdEventArgs e) { + e.Request.AddExtension(new ClaimsRequest { + Email = DemandLevel.Request, + }); + } + + protected void OpenIdAjaxTextBox1_LoggedIn(object sender, OpenIdEventArgs e) { + Label label = ((Label)this.commentSubmitted.FindControl("emailLabel")); + label.Text = e.Response.FriendlyIdentifierForDisplay; + + // We COULD get the sreg extension response here for the email, but since we let the user + // potentially change the email in the HTML form, we'll use that instead. + ////var claims = OpenIdAjaxTextBox1.AuthenticationResponse.GetExtension<ClaimsResponse>(); + if (this.emailAddressBox.Text.Length > 0) { + label.Text += " (" + this.emailAddressBox.Text + ")"; + } + } + + protected void submitButton_Click(object sender, EventArgs e) { + if (!Page.IsValid) { + return; + } + if (this.OpenIdAjaxTextBox1.AuthenticationResponse != null) { + if (this.OpenIdAjaxTextBox1.AuthenticationResponse.Status == AuthenticationStatus.Authenticated) { + // Save comment here! + this.multiView.ActiveViewIndex = 1; + } else { + this.multiView.ActiveViewIndex = 2; + } + } + } + + protected void editComment_Click(object sender, EventArgs e) { + this.multiView.ActiveViewIndex = 0; + } + + protected void OpenIdAjaxTextBox1_UnconfirmedPositiveAssertion(object sender, OpenIdEventArgs e) { + // This is where we register extensions that we want to have available in javascript + // on the browser. + this.OpenIdAjaxTextBox1.RegisterClientScriptExtension<ClaimsResponse>("sreg"); + } + } +} diff --git a/samples/RelyingPartyWebForms/ajaxlogin.aspx.designer.cs b/samples/RelyingPartyWebForms/ajaxlogin.aspx.designer.cs new file mode 100644 index 0000000..96cf3cf --- /dev/null +++ b/samples/RelyingPartyWebForms/ajaxlogin.aspx.designer.cs @@ -0,0 +1,106 @@ +//------------------------------------------------------------------------------ +// <auto-generated> +// This code was generated by a tool. +// Runtime Version:2.0.50727.3521 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// </auto-generated> +//------------------------------------------------------------------------------ + +namespace RelyingPartyWebForms { + + + public partial class ajaxlogin { + + /// <summary> + /// multiView control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.MultiView multiView; + + /// <summary> + /// commentSubmission control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.View commentSubmission; + + /// <summary> + /// OpenIdAjaxTextBox1 control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::DotNetOpenAuth.OpenId.RelyingParty.OpenIdAjaxTextBox OpenIdAjaxTextBox1; + + /// <summary> + /// openidRequiredValidator control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.RequiredFieldValidator openidRequiredValidator; + + /// <summary> + /// emailAddressBox control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.TextBox emailAddressBox; + + /// <summary> + /// commentsBox control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.TextBox commentsBox; + + /// <summary> + /// submitButton control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.Button submitButton; + + /// <summary> + /// commentSubmitted control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.View commentSubmitted; + + /// <summary> + /// emailLabel control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.Label emailLabel; + + /// <summary> + /// commentFailed control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.View commentFailed; + } +} diff --git a/samples/RelyingPartyWebForms/images/attention.png b/samples/RelyingPartyWebForms/images/attention.png Binary files differnew file mode 100644 index 0000000..8003700 --- /dev/null +++ b/samples/RelyingPartyWebForms/images/attention.png diff --git a/samples/RelyingPartyWebForms/images/dotnetopenid_tiny.gif b/samples/RelyingPartyWebForms/images/dotnetopenid_tiny.gif Binary files differnew file mode 100644 index 0000000..c4ed4f5 --- /dev/null +++ b/samples/RelyingPartyWebForms/images/dotnetopenid_tiny.gif diff --git a/samples/RelyingPartyWebForms/images/openid_login.gif b/samples/RelyingPartyWebForms/images/openid_login.gif Binary files differnew file mode 100644 index 0000000..cde836c --- /dev/null +++ b/samples/RelyingPartyWebForms/images/openid_login.gif diff --git a/samples/RelyingPartyWebForms/images/yahoo.png b/samples/RelyingPartyWebForms/images/yahoo.png Binary files differnew file mode 100644 index 0000000..3129217 --- /dev/null +++ b/samples/RelyingPartyWebForms/images/yahoo.png diff --git a/samples/RelyingPartyWebForms/login.aspx b/samples/RelyingPartyWebForms/login.aspx new file mode 100644 index 0000000..9aeef06 --- /dev/null +++ b/samples/RelyingPartyWebForms/login.aspx @@ -0,0 +1,30 @@ +<%@ Page Language="C#" AutoEventWireup="True" CodeBehind="login.aspx.cs" Inherits="RelyingPartyWebForms.login" + ValidateRequest="false" MasterPageFile="~/Site.Master" %> + +<%@ Register Assembly="DotNetOpenAuth" Namespace="DotNetOpenAuth.OpenId.RelyingParty" TagPrefix="rp" %> +<asp:Content runat="server" ContentPlaceHolderID="Main"> + <h2>Login Page </h2> + <rp:OpenIdLogin ID="OpenIdLogin1" runat="server" CssClass="openid_login" RequestCountry="Request" + RequestEmail="Request" RequestGender="Require" RequestPostalCode="Require" RequestTimeZone="Require" + RememberMeVisible="True" PolicyUrl="~/PrivacyPolicy.aspx" TabIndex="1" + OnLoggedIn="OpenIdLogin1_LoggedIn" OnLoggingIn="OpenIdLogin1_LoggingIn" + OnSetupRequired="OpenIdLogin1_SetupRequired" /> + <fieldset title="Knobs"> + <asp:CheckBox ID="requireSslCheckBox" runat="server" + Text="RequireSsl (high security) mode" + oncheckedchanged="requireSslCheckBox_CheckedChanged" /><br /> + <asp:CheckBox ID="immediateCheckBox" runat="server" Text="Immediate mode" /><br /> + <asp:CheckBoxList runat="server" ID="papePolicies"> + <asp:ListItem Text="Request phishing resistant authentication" Value="http://schemas.openid.net/pape/policies/2007/06/phishing-resistant" /> + <asp:ListItem Text="Request multi-factor authentication" Value="http://schemas.openid.net/pape/policies/2007/06/multi-factor" /> + <asp:ListItem Text="Request physical multi-factor authentication" Value="http://schemas.openid.net/pape/policies/2007/06/multi-factor-physical" /> + </asp:CheckBoxList> + </fieldset> + <br /> + <asp:Label ID="setupRequiredLabel" runat="server" EnableViewState="False" Text="You must log into your Provider first to use Immediate mode." + Visible="False" /> + <p> + <asp:ImageButton runat="server" ImageUrl="~/images/yahoo.png" ID="yahooLoginButton" + OnClick="yahooLoginButton_Click" /> + </p> +</asp:Content> diff --git a/samples/RelyingPartyWebForms/login.aspx.cs b/samples/RelyingPartyWebForms/login.aspx.cs new file mode 100644 index 0000000..4c5af89 --- /dev/null +++ b/samples/RelyingPartyWebForms/login.aspx.cs @@ -0,0 +1,75 @@ +namespace RelyingPartyWebForms { + using System; + using System.Collections.Generic; + using System.Web.UI; + using System.Web.UI.WebControls; + using DotNetOpenAuth.OpenId.Extensions.ProviderAuthenticationPolicy; + using DotNetOpenAuth.OpenId.Extensions.SimpleRegistration; + using DotNetOpenAuth.OpenId.RelyingParty; + + public partial class login : System.Web.UI.Page { + protected void Page_Load(object sender, EventArgs e) { + this.OpenIdLogin1.Focus(); + } + + protected void requireSslCheckBox_CheckedChanged(object sender, EventArgs e) { + this.OpenIdLogin1.RequireSsl = this.requireSslCheckBox.Checked; + } + + protected void OpenIdLogin1_LoggingIn(object sender, OpenIdEventArgs e) { + this.prepareRequest(e.Request); + } + + /// <summary> + /// Fired upon login. + /// </summary> + /// <param name="sender">The source of the event.</param> + /// <param name="e">The <see cref="DotNetOpenAuth.OpenId.RelyingParty.OpenIdEventArgs"/> instance containing the event data.</param> + /// <remarks> + /// Note, that straight after login, forms auth will redirect the user + /// to their original page. So this page may never be rendererd. + /// </remarks> + protected void OpenIdLogin1_LoggedIn(object sender, OpenIdEventArgs e) { + State.FriendlyLoginName = e.Response.FriendlyIdentifierForDisplay; + State.ProfileFields = e.Response.GetExtension<ClaimsResponse>(); + State.PapePolicies = e.Response.GetExtension<PolicyResponse>(); + } + + protected void OpenIdLogin1_SetupRequired(object sender, OpenIdEventArgs e) { + this.setupRequiredLabel.Visible = true; + } + + protected void yahooLoginButton_Click(object sender, ImageClickEventArgs e) { + OpenIdRelyingParty openid = new OpenIdRelyingParty(); + var req = openid.CreateRequest("yahoo.com"); + this.prepareRequest(req); + req.RedirectToProvider(); + + // We don't listen for the response from the provider explicitly + // because the OpenIdLogin control is already doing that for us. + } + + private void prepareRequest(IAuthenticationRequest request) { + // Setup is the default for the login control. But the user may have checked the box to override that. + request.Mode = this.immediateCheckBox.Checked ? AuthenticationRequestMode.Immediate : AuthenticationRequestMode.Setup; + + // Collect the PAPE policies requested by the user. + List<string> policies = new List<string>(); + foreach (ListItem item in this.papePolicies.Items) { + if (item.Selected) { + policies.Add(item.Value); + } + } + + // Add the PAPE extension if any policy was requested. + if (policies.Count > 0) { + var pape = new PolicyRequest(); + foreach (string policy in policies) { + pape.PreferredPolicies.Add(policy); + } + + request.AddExtension(pape); + } + } + } +}
\ No newline at end of file diff --git a/samples/RelyingPartyWebForms/login.aspx.designer.cs b/samples/RelyingPartyWebForms/login.aspx.designer.cs new file mode 100644 index 0000000..28e93ab --- /dev/null +++ b/samples/RelyingPartyWebForms/login.aspx.designer.cs @@ -0,0 +1,70 @@ +//------------------------------------------------------------------------------ +// <auto-generated> +// This code was generated by a tool. +// Runtime Version:2.0.50727.3521 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// </auto-generated> +//------------------------------------------------------------------------------ + +namespace RelyingPartyWebForms { + + + public partial class login { + + /// <summary> + /// OpenIdLogin1 control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::DotNetOpenAuth.OpenId.RelyingParty.OpenIdLogin OpenIdLogin1; + + /// <summary> + /// requireSslCheckBox control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.CheckBox requireSslCheckBox; + + /// <summary> + /// immediateCheckBox control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.CheckBox immediateCheckBox; + + /// <summary> + /// papePolicies control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.CheckBoxList papePolicies; + + /// <summary> + /// setupRequiredLabel control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.Label setupRequiredLabel; + + /// <summary> + /// yahooLoginButton control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.ImageButton yahooLoginButton; + } +} diff --git a/samples/RelyingPartyWebForms/loginProgrammatic.aspx b/samples/RelyingPartyWebForms/loginProgrammatic.aspx new file mode 100644 index 0000000..dfbfe69 --- /dev/null +++ b/samples/RelyingPartyWebForms/loginProgrammatic.aspx @@ -0,0 +1,15 @@ +<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="loginProgrammatic.aspx.cs" + Inherits="RelyingPartyWebForms.loginProgrammatic" MasterPageFile="~/Site.Master" %> +<asp:Content ID="Content1" runat="server" ContentPlaceHolderID="Main"> + <h2>Login Page </h2> + <asp:Label ID="Label1" runat="server" Text="OpenID Login" /> + <asp:TextBox ID="openIdBox" runat="server" /> + <asp:Button ID="loginButton" runat="server" Text="Login" OnClick="loginButton_Click" /> + <asp:CustomValidator runat="server" ID="openidValidator" ErrorMessage="Invalid OpenID Identifier" + ControlToValidate="openIdBox" EnableViewState="false" OnServerValidate="openidValidator_ServerValidate" /> + <br /> + <asp:Label ID="loginFailedLabel" runat="server" EnableViewState="False" Text="Login failed" + Visible="False" /> + <asp:Label ID="loginCanceledLabel" runat="server" EnableViewState="False" Text="Login canceled" + Visible="False" /> +</asp:Content>
\ No newline at end of file diff --git a/samples/RelyingPartyWebForms/loginProgrammatic.aspx.cs b/samples/RelyingPartyWebForms/loginProgrammatic.aspx.cs new file mode 100644 index 0000000..a79d7f8 --- /dev/null +++ b/samples/RelyingPartyWebForms/loginProgrammatic.aspx.cs @@ -0,0 +1,106 @@ +namespace RelyingPartyWebForms { + using System; + using System.Net; + using System.Web.Security; + using System.Web.UI; + using System.Web.UI.WebControls; + using DotNetOpenAuth.Messaging; + using DotNetOpenAuth.OpenId; + using DotNetOpenAuth.OpenId.RelyingParty; + + public partial class loginProgrammatic : System.Web.UI.Page { + protected void openidValidator_ServerValidate(object source, ServerValidateEventArgs args) { + // This catches common typos that result in an invalid OpenID Identifier. + args.IsValid = Identifier.IsValid(args.Value); + } + + protected void loginButton_Click(object sender, EventArgs e) { + if (!this.Page.IsValid) { + return; // don't login if custom validation failed. + } + OpenIdRelyingParty openid = this.createRelyingParty(); + try { + IAuthenticationRequest request = openid.CreateRequest(this.openIdBox.Text); + + // This is where you would add any OpenID extensions you wanted + // to include in the authentication request. + ////request.AddExtension(someExtensionRequestInstance); + + // Send your visitor to their Provider for authentication. + request.RedirectToProvider(); + } catch (ProtocolException ex) { + // The user probably entered an Identifier that + // was not a valid OpenID endpoint. + this.openidValidator.Text = ex.Message; + this.openidValidator.IsValid = false; + } catch (WebException ex) { + // The user probably entered an Identifier that + // was not a valid OpenID endpoint. + this.openidValidator.Text = ex.Message; + this.openidValidator.IsValid = false; + } + } + + protected void Page_Load(object sender, EventArgs e) { + this.openIdBox.Focus(); + + // For debugging/testing, we allow remote clearing of all associations... + // NOT a good idea on a production site. + if (Request.QueryString["clearAssociations"] == "1") { + Application.Remove("DotNetOpenId.RelyingParty.RelyingParty.AssociationStore"); + + // Force a redirect now to prevent the user from logging in while associations + // are constantly being cleared. + UriBuilder builder = new UriBuilder(Request.Url); + builder.Query = null; + Response.Redirect(builder.Uri.AbsoluteUri); + } + + OpenIdRelyingParty openid = this.createRelyingParty(); + var response = openid.GetResponse(); + if (response != null) { + switch (response.Status) { + case AuthenticationStatus.Authenticated: + // This is where you would look for any OpenID extension responses included + // in the authentication assertion. + // var extension = openid.Response.GetExtension<SomeExtensionResponseType>(); + + // Use FormsAuthentication to tell ASP.NET that the user is now logged in, + // with the OpenID Claimed Identifier as their username. + FormsAuthentication.RedirectFromLoginPage(response.ClaimedIdentifier, false); + break; + case AuthenticationStatus.Canceled: + this.loginCanceledLabel.Visible = true; + break; + case AuthenticationStatus.Failed: + this.loginFailedLabel.Visible = true; + break; + + // We don't need to handle SetupRequired because we're not setting + // IAuthenticationRequest.Mode to immediate mode. + ////case AuthenticationStatus.SetupRequired: + //// break; + } + } + } + + private OpenIdRelyingParty createRelyingParty() { + OpenIdRelyingParty openid = new OpenIdRelyingParty(); + int minsha, maxsha, minversion; + if (int.TryParse(Request.QueryString["minsha"], out minsha)) { + openid.SecuritySettings.MinimumHashBitLength = minsha; + } + if (int.TryParse(Request.QueryString["maxsha"], out maxsha)) { + openid.SecuritySettings.MaximumHashBitLength = maxsha; + } + if (int.TryParse(Request.QueryString["minversion"], out minversion)) { + switch (minversion) { + case 1: openid.SecuritySettings.MinimumRequiredOpenIdVersion = ProtocolVersion.V10; break; + case 2: openid.SecuritySettings.MinimumRequiredOpenIdVersion = ProtocolVersion.V20; break; + default: throw new ArgumentOutOfRangeException("minversion"); + } + } + return openid; + } + } +}
\ No newline at end of file diff --git a/samples/RelyingPartyWebForms/loginProgrammatic.aspx.designer.cs b/samples/RelyingPartyWebForms/loginProgrammatic.aspx.designer.cs new file mode 100644 index 0000000..835188e --- /dev/null +++ b/samples/RelyingPartyWebForms/loginProgrammatic.aspx.designer.cs @@ -0,0 +1,70 @@ +//------------------------------------------------------------------------------ +// <auto-generated> +// This code was generated by a tool. +// Runtime Version:2.0.50727.3521 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// </auto-generated> +//------------------------------------------------------------------------------ + +namespace RelyingPartyWebForms { + + + public partial class loginProgrammatic { + + /// <summary> + /// Label1 control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.Label Label1; + + /// <summary> + /// openIdBox control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.TextBox openIdBox; + + /// <summary> + /// loginButton control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.Button loginButton; + + /// <summary> + /// openidValidator control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.CustomValidator openidValidator; + + /// <summary> + /// loginFailedLabel control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.Label loginFailedLabel; + + /// <summary> + /// loginCanceledLabel control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.WebControls.Label loginCanceledLabel; + } +} diff --git a/samples/RelyingPartyWebForms/logout.aspx b/samples/RelyingPartyWebForms/logout.aspx new file mode 100644 index 0000000..84bcdc4 --- /dev/null +++ b/samples/RelyingPartyWebForms/logout.aspx @@ -0,0 +1,13 @@ +<%@ Page Language="C#" %> +<%@ Import Namespace="RelyingPartyWebForms" %> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> + +<script runat="server"> + protected void Page_Load(object sender, EventArgs e) { + State.FriendlyLoginName = null; + State.ProfileFields = null; + System.Web.Security.FormsAuthentication.SignOut(); + Response.Redirect("~/"); + } +</script> + diff --git a/samples/RelyingPartyWebForms/m/Login.aspx b/samples/RelyingPartyWebForms/m/Login.aspx new file mode 100644 index 0000000..2915106 --- /dev/null +++ b/samples/RelyingPartyWebForms/m/Login.aspx @@ -0,0 +1,17 @@ +<%@ Page Language="C#" CodeBehind="Login.aspx.cs" Inherits="RelyingPartyWebForms.m.Login" %> + +<%@ Register Assembly="DotNetOpenAuth" Namespace="DotNetOpenAuth.OpenId.RelyingParty" + TagPrefix="RP" %> +<%@ Register Assembly="System.Web.Mobile" Namespace="System.Web.UI.MobileControls" + TagPrefix="MC" %> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +</head> +<body> + <MC:Form id="form1" runat="server"> + <RP:OpenIdMobileTextBox ID="openIdTextBox" runat="server" /> + <MC:Command runat="server" ID="loginButton" OnClick="loginButton_Click" Text="Login" /> + </MC:Form> +</body> +</html> diff --git a/samples/RelyingPartyWebForms/m/Login.aspx.cs b/samples/RelyingPartyWebForms/m/Login.aspx.cs new file mode 100644 index 0000000..088fb5b --- /dev/null +++ b/samples/RelyingPartyWebForms/m/Login.aspx.cs @@ -0,0 +1,13 @@ +namespace RelyingPartyWebForms.m { + using System; + using System.Web.UI.MobileControls; + + public partial class Login : MobilePage { + protected void Page_Load(object sender, EventArgs e) { + } + + protected void loginButton_Click(object sender, EventArgs e) { + this.openIdTextBox.LogOn(); + } + } +} diff --git a/samples/RelyingPartyWebForms/m/Login.aspx.designer.cs b/samples/RelyingPartyWebForms/m/Login.aspx.designer.cs new file mode 100644 index 0000000..e3d5448 --- /dev/null +++ b/samples/RelyingPartyWebForms/m/Login.aspx.designer.cs @@ -0,0 +1,43 @@ +//------------------------------------------------------------------------------ +// <auto-generated> +// This code was generated by a tool. +// Runtime Version:2.0.50727.3521 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// </auto-generated> +//------------------------------------------------------------------------------ + +namespace RelyingPartyWebForms.m { + + + public partial class Login { + + /// <summary> + /// form1 control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.MobileControls.Form form1; + + /// <summary> + /// openIdTextBox control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::DotNetOpenAuth.OpenId.RelyingParty.OpenIdMobileTextBox openIdTextBox; + + /// <summary> + /// loginButton control. + /// </summary> + /// <remarks> + /// Auto-generated field. + /// To modify move field declaration from designer file to code-behind file. + /// </remarks> + protected global::System.Web.UI.MobileControls.Command loginButton; + } +} diff --git a/samples/RelyingPartyWebForms/styles.css b/samples/RelyingPartyWebForms/styles.css new file mode 100644 index 0000000..2e4d3db --- /dev/null +++ b/samples/RelyingPartyWebForms/styles.css @@ -0,0 +1,10 @@ +h2 +{ + font-style: italic; +} + +body +{ + font-family: Cambria, Arial, Times New Roman; + font-size: 12pt; +}
\ No newline at end of file diff --git a/samples/RelyingPartyWebForms/xrds.aspx b/samples/RelyingPartyWebForms/xrds.aspx new file mode 100644 index 0000000..e169bc7 --- /dev/null +++ b/samples/RelyingPartyWebForms/xrds.aspx @@ -0,0 +1,22 @@ +<%@ Page Language="C#" AutoEventWireup="true" ContentType="application/xrds+xml" %><?xml version="1.0" encoding="UTF-8"?> +<%-- +This page is a required for relying party discovery per OpenID 2.0. +It allows Providers to call back to the relying party site to confirm the +identity that it is claiming in the realm and return_to URLs. +This page should be pointed to by the 'realm' home page, which in this sample +is default.aspx. +--%> +<xrds:XRDS + xmlns:xrds="xri://$xrds" + xmlns:openid="http://openid.net/xmlns/1.0" + xmlns="xri://$xrd*($v*2.0)"> + <XRD> + <Service priority="1"> + <Type>http://specs.openid.net/auth/2.0/return_to</Type> + <%-- Every page with an OpenID login should be listed here. --%> + <URI priority="1"><%=new Uri(Request.Url, Response.ApplyAppPathModifier("~/login.aspx"))%></URI> + <URI priority="2"><%=new Uri(Request.Url, Response.ApplyAppPathModifier("~/loginProgrammatic.aspx"))%></URI> + <URI priority="3"><%=new Uri(Request.Url, Response.ApplyAppPathModifier("~/ajaxlogin.aspx"))%></URI> + </Service> + </XRD> +</xrds:XRDS> diff --git a/samples/Settings.StyleCop b/samples/Settings.StyleCop index 3715bd9..f6b59ac 100644 --- a/samples/Settings.StyleCop +++ b/samples/Settings.StyleCop @@ -12,6 +12,11 @@ <BooleanProperty Name="Enabled">False</BooleanProperty> </RuleSettings> </Rule> + <Rule Name="PartialElementsMustBeDocumented"> + <RuleSettings> + <BooleanProperty Name="Enabled">False</BooleanProperty> + </RuleSettings> + </Rule> </Rules> <AnalyzerSettings /> </Analyzer> diff --git a/src/DotNetOpenAuth.sln b/src/DotNetOpenAuth.sln index e2402e7..f8ac48b 100644 --- a/src/DotNetOpenAuth.sln +++ b/src/DotNetOpenAuth.sln @@ -82,14 +82,14 @@ Project("{E24C65DC-7377-472B-9ABA-BC803B73C61A}") = "DotNetOpenAuth.TestWeb", "D Debug.AspNetCompiler.VirtualPath = "/DotNetOpenAuth.TestWeb" Debug.AspNetCompiler.PhysicalPath = "DotNetOpenAuth.TestWeb\" Debug.AspNetCompiler.TargetPath = "PrecompiledWeb\DotNetOpenAuth.TestWeb\" - Debug.AspNetCompiler.Updateable = "true" + Debug.AspNetCompiler.Updateable = "false" Debug.AspNetCompiler.ForceOverwrite = "true" Debug.AspNetCompiler.FixedNames = "false" Debug.AspNetCompiler.Debug = "True" Release.AspNetCompiler.VirtualPath = "/DotNetOpenAuth.TestWeb" Release.AspNetCompiler.PhysicalPath = "DotNetOpenAuth.TestWeb\" Release.AspNetCompiler.TargetPath = "PrecompiledWeb\DotNetOpenAuth.TestWeb\" - Release.AspNetCompiler.Updateable = "true" + Release.AspNetCompiler.Updateable = "false" Release.AspNetCompiler.ForceOverwrite = "true" Release.AspNetCompiler.FixedNames = "false" Release.AspNetCompiler.Debug = "False" @@ -98,6 +98,33 @@ Project("{E24C65DC-7377-472B-9ABA-BC803B73C61A}") = "DotNetOpenAuth.TestWeb", "D StartServerOnDebug = "false" EndProjectSection EndProject +Project("{E24C65DC-7377-472B-9ABA-BC803B73C61A}") = "RelyingPartyClassicAsp", "..\samples\RelyingPartyClassicAsp\", "{97684CCA-BB86-4B77-8124-D73A5514B270}" + ProjectSection(WebsiteProperties) = preProject + TargetFramework = "3.5" + Debug.AspNetCompiler.VirtualPath = "/RelyingPartyClassicAsp" + Debug.AspNetCompiler.PhysicalPath = "..\samples\RelyingPartyClassicAsp\" + Debug.AspNetCompiler.TargetPath = "PrecompiledWeb\RelyingPartyClassicAsp\" + Debug.AspNetCompiler.Updateable = "true" + Debug.AspNetCompiler.ForceOverwrite = "true" + Debug.AspNetCompiler.FixedNames = "false" + Debug.AspNetCompiler.Debug = "True" + Release.AspNetCompiler.VirtualPath = "/RelyingPartyClassicAsp" + Release.AspNetCompiler.PhysicalPath = "..\samples\RelyingPartyClassicAsp\" + Release.AspNetCompiler.TargetPath = "PrecompiledWeb\RelyingPartyClassicAsp\" + Release.AspNetCompiler.Updateable = "true" + Release.AspNetCompiler.ForceOverwrite = "true" + Release.AspNetCompiler.FixedNames = "false" + Release.AspNetCompiler.Debug = "False" + VWDPort = "49675" + DefaultWebSiteLanguage = "Visual C#" + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RelyingPartyWebForms", "..\samples\RelyingPartyWebForms\RelyingPartyWebForms.csproj", "{1E8AEA89-BF69-47A1-B290-E8B0FE588700}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenIdProviderWebForms", "..\samples\ProviderPortal\OpenIdProviderWebForms.csproj", "{2A59DE0A-B76A-4B42-9A33-04D34548353D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RelyingPartyMvc", "..\samples\RelyingPartyMvc\RelyingPartyMvc.csproj", "{07B193F1-68AD-4E9C-98AF-BEFB5E9403CB}" +EndProject Global GlobalSection(TestCaseManagementSettings) = postSolution CategoryFile = DotNetOpenAuth.vsmdi @@ -135,6 +162,22 @@ Global {47A84EF7-68C3-4D47-926A-9CCEA6518531}.Debug|Any CPU.Build.0 = Debug|Any CPU {47A84EF7-68C3-4D47-926A-9CCEA6518531}.Release|Any CPU.ActiveCfg = Debug|Any CPU {47A84EF7-68C3-4D47-926A-9CCEA6518531}.Release|Any CPU.Build.0 = Debug|Any CPU + {97684CCA-BB86-4B77-8124-D73A5514B270}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {97684CCA-BB86-4B77-8124-D73A5514B270}.Debug|Any CPU.Build.0 = Debug|Any CPU + {97684CCA-BB86-4B77-8124-D73A5514B270}.Release|Any CPU.ActiveCfg = Debug|Any CPU + {97684CCA-BB86-4B77-8124-D73A5514B270}.Release|Any CPU.Build.0 = Debug|Any CPU + {1E8AEA89-BF69-47A1-B290-E8B0FE588700}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1E8AEA89-BF69-47A1-B290-E8B0FE588700}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1E8AEA89-BF69-47A1-B290-E8B0FE588700}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1E8AEA89-BF69-47A1-B290-E8B0FE588700}.Release|Any CPU.Build.0 = Release|Any CPU + {2A59DE0A-B76A-4B42-9A33-04D34548353D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2A59DE0A-B76A-4B42-9A33-04D34548353D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2A59DE0A-B76A-4B42-9A33-04D34548353D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2A59DE0A-B76A-4B42-9A33-04D34548353D}.Release|Any CPU.Build.0 = Release|Any CPU + {07B193F1-68AD-4E9C-98AF-BEFB5E9403CB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {07B193F1-68AD-4E9C-98AF-BEFB5E9403CB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {07B193F1-68AD-4E9C-98AF-BEFB5E9403CB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {07B193F1-68AD-4E9C-98AF-BEFB5E9403CB}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -145,5 +188,9 @@ Global {6EC36418-DBC5-4AD1-A402-413604AA7A08} = {B4C6F647-C046-4B54-BE12-7701C4119EE7} {EC910270-AAB6-4AC6-9B57-99118CFBE557} = {B4C6F647-C046-4B54-BE12-7701C4119EE7} {AA78D112-D889-414B-A7D4-467B34C7B663} = {B4C6F647-C046-4B54-BE12-7701C4119EE7} + {97684CCA-BB86-4B77-8124-D73A5514B270} = {B4C6F647-C046-4B54-BE12-7701C4119EE7} + {1E8AEA89-BF69-47A1-B290-E8B0FE588700} = {B4C6F647-C046-4B54-BE12-7701C4119EE7} + {2A59DE0A-B76A-4B42-9A33-04D34548353D} = {B4C6F647-C046-4B54-BE12-7701C4119EE7} + {07B193F1-68AD-4E9C-98AF-BEFB5E9403CB} = {B4C6F647-C046-4B54-BE12-7701C4119EE7} EndGlobalSection EndGlobal diff --git a/src/DotNetOpenAuth.vsmdi b/src/DotNetOpenAuth.vsmdi index 77631ff..0fd7941 100644 --- a/src/DotNetOpenAuth.vsmdi +++ b/src/DotNetOpenAuth.vsmdi @@ -13,32 +13,29 @@ <TestLink id="c87bee54-0edd-1051-b5f8-2233692249ba" name="DiscoverCommunityInameCanonicalIDs" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="ba35acc7-78d2-6710-57ac-6843210d4202" name="UserSetupUrlRequiredInV1Immediate" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="a4aa113a-57b5-a52c-c4e3-f70d6702badb" name="Default" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="c905ca57-e427-3833-c2dd-17ca9f6962cd" name="SendIndirectMessageFormPost" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="f3cbbcda-49ff-fc43-140b-f362081654c3" name="CtorNullTypeUri" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="1757957f-17bb-ef9f-39f8-c008863ec033" name="AssuranceLevels" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="6fbd433d-cd54-b206-6df3-fbd591690a4d" name="HtmlDiscover_11" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="d083396b-db68-1318-e62b-6dc9f89e26bd" name="CtorDefault" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="0f56721c-ef8f-84be-28b7-d909614c2f85" name="EqualsTest" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="44afc59c-60fc-3179-b5a6-1e58e7752d54" name="ApplyHeadersToResponseNullHeaders" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="95e1fc36-2500-2721-1919-35e9e8349a1c" name="AddPolicyMultipleTimes" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="48115dc0-1323-bab0-c540-695a2160e0a3" name="CtorNull" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="3cd9447e-9ffd-f706-37bb-e7eb5828e430" name="InvalidRealmEmpty" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="46877579-ba4c-c30c-38c4-9c6ad3922390" name="InsufficientlyProtectedMessageReceived" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="58d69d1e-3bd2-3379-0af1-188f9cff2dd0" name="IsTypeUriPresentEmpty" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="cb48421f-f4ff-3994-3abc-4be35f8bfd99" name="AssociateQuietlyFailsAfterHttpError" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="2599d559-d036-5dd2-0b5b-fb229c3bf486" name="InvalidRealmBadWildcard2" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="bdba0004-be80-f5c1-1aae-487db09bdf04" name="GetReturnToArgumentDoesNotReturnExtraArgs" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="8fd673c8-977a-7b66-72cb-38c7054796c7" name="DiscoverRequireSslWithSecureRedirects" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="8a5c9404-1e77-68cf-229a-ef7ed413e6e7" name="OptionalNonNullableStruct" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="8346368c-9c8a-de76-18dd-5faeeac3917d" name="OPRejectsMismatchingAssociationAndSessionTypes" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="8375c7bb-b539-3396-885a-a3ca220078ec" name="InsufficientlyProtectedMessageSent" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="315b5857-7697-8222-f94c-f6f10d539491" name="BaseSignatureStringTest" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="0290975f-02ce-d8a7-d723-5dae623cab46" name="CtorNullTokenManager" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="21cf1f9a-063f-395a-f8aa-92c190c69146" name="SignaturesMatchKnownGood" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="12071fbc-202e-05a8-655a-b21917615b5e" name="IsReturnUrlDiscoverable" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="3fc3ac8d-7772-b620-0927-f4bd3a24ce2f" name="SendNull" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="566a1d44-126b-4d4b-1737-044ff7cb8dbf" name="CtorUndirectedMessageWithNullReceiver" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="2f2ea001-a4f8-ff0d-5d12-74180e0bf610" name="HttpsSignatureVerificationNotApplicable" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="3e2f1dad-3684-587c-9039-8d116582be10" name="GetReturnToArgumentEmptyKey" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="46ec24da-deb7-27c7-6dc6-52090e4fd1fb" name="Serialize" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="a6e464af-42df-1ba4-17e5-b955352664b5" name="RPOnlyRenegotiatesOnce" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="3b70dd09-384d-5b99-222b-dc8ce8e791f2" name="SecuritySettingsSetNull" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="04be6602-31a2-f4ae-8fdb-b9ad2ac370be" name="PrepareMessageForReceiving" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="90557d85-db17-e9ab-e17b-32d6cc9fd437" name="TrimFragment" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="e1958fc5-a979-88b2-b593-3bc89ad6ad4e" name="GetEnumeratorUntyped" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> @@ -61,6 +58,7 @@ <TestLink id="196be55e-a3e5-adf3-9f15-13ba6cce0701" name="ValidRealmsTest" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="53bc1962-e7c2-04b6-cafa-0f6fde7592a9" name="ReadFromRequestNoContext" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="4a00f3ab-f405-95a7-d745-2fcf7787eb56" name="GetNonexistentHandle" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="2c2b48d0-8009-e7e0-9ff4-34f9973f59da" name="EqualsTest" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="ed7efca3-c3c1-bc4a-cef7-eaf984749355" name="ValidMessageReceivedTest" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="fe55cc74-98eb-c6c7-622f-77ad3e304c10" name="EqualityTests" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="f362baf3-da5b-1b8c-39ae-7c9b2051270a" name="AuthenticationTimeUtcSetUtc" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> @@ -68,7 +66,6 @@ <TestLink id="5a0d31d9-9c70-2a28-3e8c-46e8e047ac2d" name="ReceiveNull" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="8bbc6a02-b5a4-ea8e-2a77-8d1b6671ceb5" name="ImplicitConverstionFromUriTests" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="5ab06bb5-d047-8c3a-6b91-5951e0a55cc5" name="ToStringTest" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="77e5af06-b02d-692e-b32f-40ea39e77fbd" name="FriendlyIdentifierForDisplay" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="d6951a97-9d0b-31c1-7a29-01fbb986c5a9" name="SpoofedClaimedIdDetectionSolicited" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="c057a3e5-b527-62a9-c19b-abb82e6be621" name="SendIndirectMessage301GetEmptyRecipient" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="decb3fef-ef61-6794-5bc6-f7ff722a146e" name="EqualsTest" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> @@ -84,16 +81,17 @@ <TestLink id="c23e762d-4162-cb9e-47b3-455a568b5072" name="SendIndirectMessageFormPostEmptyRecipient" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="e9cceef5-383d-92f0-a8bb-f3e207582836" name="RealmReturnToMismatchV2" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="2f6a81c5-cd04-0ca0-22ee-d4213f9cf147" name="EqualityTests" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="59295023-d248-e9c4-68b9-65f6ea38490c" name="VerifyArgumentNotNullDoesNotThrow" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="0f80456a-5465-dd68-bfb0-ba27b676187c" name="EqualsTests" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="53cbbf4a-89d3-122b-0d88-662f3022ce26" name="OpenIdMaxAuthenticationTime" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="03e293d0-dbe8-ad09-1ddd-de7be2cf9276" name="CopyTo" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="be41e9c1-ecde-cc80-37d0-4126225e4cda" name="CtorNull" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="b2e1bba0-ab24-cdd5-906c-a3655814ab2d" name="SendSetsTimestamp" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="aef95d4e-ad69-0eca-6528-7fce78512336" name="EqualityTest" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="72f0a17b-c508-ce02-a5ed-361d78348054" name="AddAttribute" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="b4b00582-dcc9-7672-0c02-52432b074a92" name="GetNullType" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="5803e93d-e256-86ba-e10e-499d2f813c6d" name="Trivial" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="da8fcfa9-bd2c-eca0-ecbf-90364f84e8e5" name="AddExtraFieldThatAlreadyExists" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="11108b79-f360-9f7c-aebc-2d11bebff96a" name="ReadFromRequestForm" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="29e45877-ca7a-85de-5c39-6d43befe1a1e" name="DiscoveryRequireSslWithInsecureXrdsButSecureLinkTags" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="4a009f39-66b1-9cc5-ea8b-13b75ab22a5b" name="ContainsKey" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="1f3ea08b-9880-635f-368f-9fcd3e25f3cd" name="ReadFromRequestNull" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="715dcbdd-28f5-3c33-7d88-e0a1b648d89a" name="CreateRequestDumbMode" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> @@ -105,8 +103,10 @@ <TestLink id="49a266cf-4ab6-3fdc-f4fd-21533f42c7cb" name="CtorWithProtocolMessage" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="ab653060-5bec-3dc6-78ee-a5ef7d393b1d" name="AddPolicyMultipleTimes" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="7ca16e07-126d-58ac-2ac5-a09a8bf77592" name="InvalidRealmBadWildcard1" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="f967c0af-c04c-d156-4faf-8978bfcab5d7" name="RequiredNullableStruct" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="3744e1f1-6be1-f27f-78e9-5410d356ccf4" name="Ctor" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="7debb527-142a-6ca6-3b9b-1e131c18e801" name="AccessTokenUriTest" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="2c2b48d0-8009-e7e0-9ff4-34f9973f59da" name="EqualsTest" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="88ae5661-da27-91c5-4d78-1f43cd716127" name="EqualsTest" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="1c531011-403a-0821-d630-d5433d968f31" name="CtorFromRequest" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="7b1fb2c4-39c0-0d39-700c-96d992f5a01f" name="AuthenticationTimeUtcSetUnspecified" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="c9d67d40-1903-8319-0f7c-d70db4846380" name="SendWithoutAspNetContext" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> @@ -114,46 +114,46 @@ <TestLink id="f4b313bb-cebc-a854-ffbd-6c955d850a05" name="VerifyGoodTimestampIsAccepted" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="6badbaa8-33d1-13c4-c1f9-aef73a9ac5bf" name="InvalidRawBirthdate" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="7dff83bd-f6e7-3dbe-930e-aa6089f4447a" name="AddAttributeTwice" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="b2b54c72-1d26-8c28-ebf5-7a5a4beeec43" name="VerifyNonZeroLengthOnNull" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="77e5af06-b02d-692e-b32f-40ea39e77fbd" name="FriendlyIdentifierForDisplay" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="782d64c8-46af-a624-b3f6-a65aeaa57bfe" name="LastLineNotTerminatedLoose" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="6c95f443-463e-2856-f500-b9029645e44c" name="RequestNullRecipient" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="af7cb01c-950e-23d7-0f32-082b7af8b382" name="CtorNullToObject" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="75fa4664-bb0e-3a54-de29-c18ac712b231" name="Mode" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="c11e5541-0a92-85ab-4f90-0db7766ebdcb" name="CtorUnsolicited" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="8df5d75f-bd4d-ce4e-2faf-6106b623de42" name="AddAttributeRequestStrangeUri" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="be41e9c1-ecde-cc80-37d0-4126225e4cda" name="CtorNull" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="88aaa032-b18a-b334-937b-66837c5f987c" name="AssociateRenegotiateBitLength" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="c2c78c43-7f50-ffc3-affb-e60de2b76c94" name="CreateQueryStringNullDictionary" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="77934ac4-bd65-7ad8-9c53-9c9447f9e175" name="GetReturnToArgumentAndNames" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="fba4d9a6-d8c7-a063-7c07-4a27c38c94a9" name="InvalidRealmBadWildcard3" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="06b350b0-79d1-9393-7620-cd919061898c" name="ParseEndUserSuppliedUriIdentifier" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="f41ce7ab-5500-7eea-ab4d-8c646bffff23" name="HttpSchemePrepended" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="17267cde-a296-8293-5bd1-9ca629817e4b" name="OpenIdRelyingParty" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="a260d196-066f-b0ae-a40e-fb9d962b28a4" name="XrdsDirectDiscovery_20" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="c79dd056-8fff-3393-f125-4b83cf02cb3b" name="RequireSsl" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="7650ec62-b144-f36f-8b56-31ad20521d0e" name="DoesNotStripFragment" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="aa79cdf5-e0bc-194e-fdbb-78369c19c30f" name="ConstantFieldMemberInvalidValues" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="e2b1ae2a-8f30-b6b3-bca6-ef28fc5a0175" name="ClaimedIdAndLocalIdSpecifiedIsValid" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="577b8522-8516-4f62-22db-76227bf82f4c" name="UserSetupUrlNotRequiredInV1SetupOrV2" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="9026e58c-8582-0852-3c3c-9eadfd544cbc" name="VerifyNonZeroLengthOnEmpty" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="a59c5dc0-de4d-8136-8545-2e2e9616de46" name="SerializationWithXri" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="65f16786-7296-ee46-8a8f-82f18b211234" name="AddByKeyValuePair" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="cc0031b8-1fdb-cd87-97c1-c6f893c296e0" name="TooManyBindingElementsProvidingSameProtection" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="e2ab77b2-a6dc-f165-1485-140b9b3d916f" name="EqualityTests" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="d66a3b7a-1738-f6b3-aed1-e9bc80734ae9" name="CtorNullString" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="2f1a3fc4-77ec-2ae3-668c-9e18f9ab0ebe" name="SendIndirectMessage301Get" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="7cdabb8a-aefa-e90e-c32e-047404b64c2d" name="SerializeTest" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="e7a41771-7dda-be44-0755-e06300f3cd92" name="IsSaneTest" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="f4bec8d2-0531-34ab-8d50-bca260b58c61" name="ReadFromRequestWithContext" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="f6ecb459-cc64-36ee-438c-4514e9413586" name="AddAttributeByPrimitives" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="051a85ed-eef9-9437-507d-d6208b6a8f74" name="DiscoveryWithRedirects" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="44afc59c-60fc-3179-b5a6-1e58e7752d54" name="ApplyHeadersToResponseNullHeaders" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="fb91e9dd-fc3b-d8a7-a5d7-d215d5ba880f" name="CtorStringHttpSchemeSecure" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="4fd5baa2-8f39-8bf6-db8f-aa92592bfc06" name="CtorRequest" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="300ae1f7-fc61-1d41-b262-f8c830b6e115" name="RemoveTest1" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="beb086e9-5eb7-fb8f-480a-70ede9efd70d" name="CreateRequests" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="59295023-d248-e9c4-68b9-65f6ea38490c" name="VerifyArgumentNotNullDoesNotThrow" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="6daa360b-71e4-a972-143f-01b801fada84" name="DeserializeWithExtraFields" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="457d6b32-d224-8a06-5e34-dbef3e935655" name="HttpSignatureVerification" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="ef6cebca-f8da-edf6-0217-8bb854710090" name="DiscoveryCommunityInameDelegateWithoutCanonicalID" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="8aecb3a5-2cb5-143d-aa99-9514fa8dfacb" name="AddAttributeByValue" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="00089858-d849-1e5f-4fb5-31d8d0590233" name="VerifyArgumentNotNullThrows" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="e78ab82c-3b49-468a-b2ad-ca038e98ff07" name="GetEnumerator" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="566a1d44-126b-4d4b-1737-044ff7cb8dbf" name="CtorUndirectedMessageWithNullReceiver" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="1ea8bd07-75a5-bfc0-5f8c-1a78d04240c2" name="TryGetValue" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="c891c6bc-da47-d4ab-b450-f3e3a0d6cba8" name="NoAssociationNegative" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="777af676-ee70-0e16-799b-85b9ec33cd63" name="IsValid" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="352d9fd6-cf38-4b72-478f-e3e17ace55f5" name="NoValueLoose" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="9986fea9-8d64-9ada-60cb-ab95adb50fb7" name="ToStringDeferredEmptyMultiLine" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="62c6ee5b-ac29-461c-2373-bf620e948825" name="InvalidRealmNoScheme" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> @@ -161,10 +161,10 @@ <TestLink id="98e7a0f9-ab6c-7ff1-3a2c-00d8244e1bec" name="CommonMethods" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="385c302d-b546-c164-2a59-2e35f75d7d60" name="RemoveStructDeclaredProperty" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="e137b84a-d2a7-9af6-d15d-a92417668ccf" name="Transport" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="a1ff4ada-fe5d-d2f3-b7fb-8e72db02b3c3" name="Full" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="5218fba2-d1af-e1f4-7641-9ae1d4975430" name="DirectResponsesSentUsingKeyValueForm" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="4ba7ca33-72f1-3fc6-d37c-65134eda904d" name="AddDeclaredValueThatAlreadyExists" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="f787ae5d-b8fc-0862-a527-9157d11bbed7" name="UntrustedWebRequest" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="643c9887-3f12-300e-fdac-17ae59652712" name="Mode" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="0435e38a-71f2-d58d-9c07-d97d830a1578" name="ExtensionResponsesAreSigned" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="df159af7-abf5-089c-b592-e6f535dab1c1" name="Ctor" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="65752c29-fa1f-7b88-bbec-5329af8db4d8" name="IsValid" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="7c048c58-c456-3406-995f-adb742cc2501" name="DeserializeInvalidMessage" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> @@ -173,31 +173,31 @@ <TestLink id="54eae9ed-bed1-eeda-b6ea-045c8f7e2ba5" name="SendIndirectMessage301GetNullFields" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="b9cda1a0-83cd-cf4b-b61f-4faa75fa37ba" name="ReceivedReplayProtectedMessageTwice" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="1deb0ca9-923a-8ef7-7a24-d5d5af04acdf" name="SpecAppendixAExample" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="48a1db17-5066-74e9-b6b2-d64166b349b1" name="AddAttributeNull" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="b70b4bd5-6dae-b4ad-349c-c3ad70603773" name="ReadFromRequestQueryString" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="5716de48-f311-944f-45ff-872d68bc2bcf" name="IsExtensionSupportedNullType" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="ff78d828-b437-aaeb-e48a-85a5ad1fe396" name="Ctor" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="f3cbbcda-49ff-fc43-140b-f362081654c3" name="CtorNullTypeUri" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="e7a41771-7dda-be44-0755-e06300f3cd92" name="IsSaneTest" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="1dcbaac6-0b11-8d8f-50d7-237574abbab1" name="ToDictionaryWithSkippedNullKey" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="d570770a-74e4-50ec-8eb9-91bd81c093ad" name="ParseNull" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="a79e43c9-ad5a-5543-51ff-22271ec87ab0" name="PrepareMessageForSendingNull" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="e3a3b3b6-e05f-0a99-e20c-af91a9065819" name="AssociateRequestDeterminedBySecuritySettings" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="7b89844d-f60a-fb66-c48d-e483864c66b5" name="RespondTooManyValues" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="3b535521-90c8-7f49-545f-bcfc4ad16d40" name="UnresponsiveProvidersComeLast" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="b09311d4-4dea-6786-3e59-9c62fe16e301" name="ParameterNames" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="f3af5fd8-f661-dc4f-4539-947b081a8b54" name="ReceivedReplayProtectedMessageJustOnce" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="48a1db17-5066-74e9-b6b2-d64166b349b1" name="AddAttributeNull" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="0f56721c-ef8f-84be-28b7-d909614c2f85" name="EqualsTest" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="b71e8878-b20e-5d96-bce4-7f10831ceaf8" name="AddPolicies" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="2f2ea001-a4f8-ff0d-5d12-74180e0bf610" name="HttpsSignatureVerificationNotApplicable" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="dd5be0e2-a1fc-3369-0b11-78b728eeaba5" name="CtorNullUri" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="0443f5f8-aa08-80d5-dcc6-261802debe5a" name="XrdsDirectDiscovery_10" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="a1ff4ada-fe5d-d2f3-b7fb-8e72db02b3c3" name="Full" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="2d82ac4b-99b4-a132-eb62-d943e02d1498" name="ApplyHeadersToResponse" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="cb9a8325-abf5-5d97-a94e-a6d34f2b51e1" name="AssociateRenegotiateLimitedByRPSecuritySettings" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="97f0277a-86e6-5b5a-8419-c5253cabf2e0" name="UserAuthorizationUriTest" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="44ced969-83dd-201d-a660-e3744ee81cf8" name="ConstructorTest" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="f787ae5d-b8fc-0862-a527-9157d11bbed7" name="UntrustedWebRequest" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="777af676-ee70-0e16-799b-85b9ec33cd63" name="IsValid" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="f583b298-139a-e733-dde6-f9dc4b73d4bf" name="SendDirectMessageResponseHonorsHttpStatusCodes" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="5f02e24c-2972-c598-ca71-ea362b2fe7d8" name="SecuritySettingsSetNull" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="65f16786-7296-ee46-8a8f-82f18b211234" name="AddByKeyValuePair" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="f49bcd49-76fb-bfea-b119-4e0f70159f80" name="OpenIdProvider" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="5aa4dfa9-9691-bfe0-7d81-587cfa519a55" name="DirectResponsesReceivedAsKeyValueForm" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="dd9e3279-2d7e-e88e-ccfa-ef213055fc3d" name="SendDirectedNoRecipientMessage" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="8346368c-9c8a-de76-18dd-5faeeac3917d" name="OPRejectsMismatchingAssociationAndSessionTypes" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="89de77d8-729a-7efe-9667-71b1f5d78859" name="CtorBadXri" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="f6979feb-7016-4e2b-14e2-e6c2c392419f" name="RemoveByKeyValuePair" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="454165a2-c26e-5740-09a9-d234db052ba3" name="InvalidRealmNullUri" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="03b47440-3d09-ab28-97f1-39809f5703b6" name="NormalizeCase" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> @@ -205,36 +205,35 @@ <TestLink id="77047207-0571-72d5-71bd-586b878bcc0c" name="Base64Member" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="1e2ae78c-d2f3-a808-2b82-eca9f9f2e458" name="Keys" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="a314e3b9-36a5-bfbb-3e15-e5003f22cf87" name="Serialize" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="599add9e-e9eb-5e8a-ce6b-6dc73c2bb408" name="DataContractNamespace" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="73c6c979-205d-2216-d98d-2dd136b352c6" name="UtcCreationDateConvertsToUniversal" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="4bd86299-18d7-abbe-e5d2-1afad17279e9" name="Parse" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="3744e1f1-6be1-f27f-78e9-5410d356ccf4" name="Ctor" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="93c157e8-1293-3aff-f616-66502872b37d" name="DiscoveryRequiresSslIgnoresInsecureEndpointsInXrds" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="fa2e5bbd-4c41-f2b1-e875-38c6ef011fa1" name="RandomCharactersTest" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="47706bc6-7bee-0385-62b4-4f9cec6cc702" name="CtorWithTextMessage" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="a778f331-f14e-9d6e-f942-a023423540f6" name="Ctor" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="495dd486-08dd-d365-7a84-67d96fef8460" name="SendIndirectedUndirectedMessage" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="fda58c48-e03a-73a3-4294-9a49e776ffb6" name="CtorWithTextMessageAndInnerException" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="24506e06-a678-66cc-48ee-b7f11f18a6e8" name="StripXriScheme" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="d0a92f93-9bb4-1821-81cf-e9b50e3e7d62" name="SendDirectMessageResponse" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="0443f5f8-aa08-80d5-dcc6-261802debe5a" name="XrdsDirectDiscovery_10" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="3b535521-90c8-7f49-545f-bcfc4ad16d40" name="UnresponsiveProvidersComeLast" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="a883dc73-d6be-e59a-6da2-0db1d4452679" name="BindingElementsOrdering" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="d5f4e610-eabe-1dc0-ab3f-7c9dcb17fcc3" name="CtorImpliedLocalIdentifier" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="ad56539c-6156-5f62-a98a-b24ae0159cc6" name="XmlSerialization" storage="..\bin\debug\dotnetopenauth.test.dll" enabled="false" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="f2dc59e6-c428-20f3-87ff-8b44f01c4ab1" name="GetNonMessageType" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="0215f125-3936-484e-a8d0-d940d85bbc27" name="AppendQueryArgsNullDictionary" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="cbfeb75b-d031-7df3-c281-3c9e1c450042" name="CtorFromRequest" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="182203f3-5a16-b736-ea8c-b59f6bf7df66" name="InvalidRealmTwoWildcards2" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="a6ea74e5-8681-4eb4-a51b-5051e5f7603c" name="NonFieldOrPropertyMember" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="3536ba12-fdb0-2ac9-3fef-00a2dd8e9a65" name="SharedAssociationTampered" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="6ef9df5a-d069-0103-5260-593808f232da" name="XrdsDiscoveryFromHead" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="51a08d94-c327-4d28-1f0c-f7920ea54870" name="ValidMessageTest" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="21fa5a5c-c04b-831f-c537-fc8be1bf65b2" name="IsExtensionSupported" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="f44fb549-fc8a-7469-6eed-09d9f86cebff" name="SendDirectMessageResponse" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="8aecb3a5-2cb5-143d-aa99-9514fa8dfacb" name="AddAttributeByValue" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="b71d12f6-58a1-cf82-d06e-e57c0a3ea55c" name="RPRejectsUnencryptedSuggestion" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="cd219db4-4f6e-8ff4-f957-c8428d38c118" name="HttpSignatureGeneration" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="88aaa032-b18a-b334-937b-66837c5f987c" name="AssociateRenegotiateBitLength" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="0435e38a-71f2-d58d-9c07-d97d830a1578" name="ExtensionResponsesAreSigned" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="9684f7bf-cdda-a2c5-0822-29cb0add3835" name="ResponseNonceGetter" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="b63c4b89-3889-6dcf-8890-c92fc44c0b10" name="VerifyBadTimestampIsRejected" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="5271f941-565f-5977-6884-82cef09161db" name="ParseEndUserSuppliedXriIdentifer" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="0c1a0323-092a-34b3-1601-1f941569efab" name="CtorGoodXri" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="b71d12f6-58a1-cf82-d06e-e57c0a3ea55c" name="RPRejectsUnencryptedSuggestion" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="9bdc56c0-33ce-b46c-4031-bd3252b499a6" name="PrivateAssociationPositive" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="2495fc9b-d766-5ae7-7324-f044c4ce1242" name="AddNullValue" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="937b85f4-1ef3-84d1-a567-8bba079a33a9" name="Properties" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> @@ -258,12 +257,13 @@ <TestLink id="8b11aa63-4c0f-41ff-f70c-882aacf939fe" name="CtorCountNegative" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="28fe030c-d36e-13cf-475c-7813210bf886" name="AddAttributeRequestAgain" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="538a7a31-b908-a435-4861-2bff584f6340" name="ApplyHeadersToResponseNullResponse" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="93c157e8-1293-3aff-f616-66502872b37d" name="DiscoveryRequiresSslIgnoresInsecureEndpointsInXrds" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="64142858-d52e-be06-d11f-6be326c6176b" name="RespondTwoValues" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="910f8448-5454-8ae5-cba3-690c7f375576" name="ParameterNames" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="8375c7bb-b539-3396-885a-a3ca220078ec" name="InsufficientlyProtectedMessageSent" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="507cd1b6-1010-0bca-cf7f-f96e3f4f6c6c" name="QueryBeforeSettingUrl" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="734dd45c-6320-26a9-e412-62ecacfd285a" name="CtorNullAttribute" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="439c8c16-2ba5-eb3b-b631-ce50ec48eba0" name="CtorNullMember" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="3df1f62b-4fb4-d399-cf7f-40b72001d9d6" name="CtorUnsolicited" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="c905ca57-e427-3833-c2dd-17ca9f6962cd" name="SendIndirectMessageFormPost" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="58f848e5-42d7-1508-f9b5-7691337e6da9" name="IsExtensionSupportedEmptyString" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="5208d168-ca23-f2f1-a222-fc304765dc76" name="CtorWithNullReceiver" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="55b078e4-3933-d4e0-1151-a0a61321638e" name="ReadFromRequestAuthorization" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> @@ -279,13 +279,13 @@ <TestLink id="7c8eac5a-0455-e038-0e9a-10e59d459452" name="CtorUriHttpSchemeSecure" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="f12bf351-584c-bc51-c315-a67f1076927c" name="ReturnToDoesNotMatchRecipient" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="d3c4624f-f78a-2ff3-199a-77c922059718" name="Best" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="89de77d8-729a-7efe-9667-71b1f5d78859" name="CtorBadXri" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="81f670d0-d314-c53c-9d91-c0765dfc30c1" name="MessagePartsTest" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="3d0effa3-894a-630c-02b0-ada4b5cef795" name="CtorNull" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="54a65e0b-1857-72b9-797b-fe3d9a082131" name="Ctor" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="fdf439d0-3b74-4d32-d395-d5a2559ed88b" name="Ctor" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="5f3758b3-1410-c742-e623-b964c01b0633" name="AuthenticationTimeUtcConvertsToUtc" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="547cfee6-bbb4-6138-a114-fc0eb6cc94f6" name="PrivateAssociationTampered" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="7650ec62-b144-f36f-8b56-31ad20521d0e" name="DoesNotStripFragment" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="b2b54c72-1d26-8c28-ebf5-7a5a4beeec43" name="VerifyNonZeroLengthOnNull" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="14acb719-f090-018f-b870-9a5acb1d7179" name="AddAuthLevelTypes" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="90d3c411-8895-a07f-7a21-258b9d43c5b2" name="InvalidMessageNoNonceReceivedTest" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="594ec9bc-2c6d-7a02-233a-18461d0717f8" name="RecipientWithoutMessage" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> @@ -293,16 +293,16 @@ <TestLink id="fdf5b3df-239b-26fd-c1a2-152057195b7e" name="ReadFromRequestForm" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="534bee09-36e1-c3e0-f6af-bc191b10aa48" name="CtorNullSigner" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="ae384709-e9a4-0142-20ba-6adb6b40b3e2" name="CtorStringHttpsSchemeSecure" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="88ae5661-da27-91c5-4d78-1f43cd716127" name="EqualsTest" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="3b70dd09-384d-5b99-222b-dc8ce8e791f2" name="SecuritySettingsSetNull" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="19d2219e-c04d-fa3a-5e26-92448f35f21d" name="RespondNull" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="f17128c1-5953-5391-ed75-c33774eacbfc" name="LastLineNotTerminated" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="b70b4bd5-6dae-b4ad-349c-c3ad70603773" name="ReadFromRequestQueryString" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="152e7a3a-21f9-eabf-0065-08597a0cc9a6" name="AuthorizationHeaderScheme" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="2f1a3fc4-77ec-2ae3-668c-9e18f9ab0ebe" name="SendIndirectMessage301Get" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="f18b514c-4f78-5421-8bdf-8b0f1fdf2282" name="HandleLifecycle" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="4b44b825-36cc-77f8-3a4a-5892c540f577" name="GetValue" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="20646985-c84a-db8e-f982-ec55d61eaacd" name="ResponseNonceSetter" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="b32b6295-d4a9-3369-f072-28a71e84d4e8" name="SerializationWithUri" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="115283b9-d95c-9a92-2197-96685ee8e96a" name="TwoExtensionsSameTypeUri" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="7fb8d29c-c8ea-7f88-ed42-ae7368d6a429" name="CtorNullStore" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="da8fcfa9-bd2c-eca0-ecbf-90364f84e8e5" name="AddExtraFieldThatAlreadyExists" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="be00d3ef-f24d-eb8a-d251-4d691736ee6f" name="AddAttributeRequestNull" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="6c20a52a-bab7-e84e-faca-fd79ec5303d9" name="CtorCountZero" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="c6b3ebb0-58f7-249a-5944-0d31a600f679" name="IsExtensionSupportedNullString" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> @@ -311,17 +311,16 @@ <TestLink id="58df167c-cf19-351c-cb09-5c52ae9f97be" name="DeserializeNull" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="b58e4791-68c0-1bc0-2e48-e1351459ee46" name="UserSetupUrlSetForV1Immediate" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="fa52f2db-fc1e-ba31-cc5e-0bcc05998187" name="NoValue" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="f4bec8d2-0531-34ab-8d50-bca260b58c61" name="ReadFromRequestWithContext" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="e78ab82c-3b49-468a-b2ad-ca038e98ff07" name="GetEnumerator" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="bc3e979b-09ea-c45d-5714-2d1fb00244cf" name="IncomingMessageMissingRequiredParameters" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="0362a92c-a21c-f718-6b1e-3d154c14acd0" name="RequestUsingPost" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="9aa6a81e-c198-c0fd-0252-003b856b7674" name="ConstantFieldMemberValidValues" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="81f670d0-d314-c53c-9d91-c0765dfc30c1" name="MessagePartsTest" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="20f505d3-53b5-4e97-07b8-cda907951bf2" name="GetNullType" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="7bf8e806-68a1-86bc-8d91-9a99d237d35c" name="CreateRequestMessage" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="d12e8df0-1195-ab75-2275-7c8f854ddf98" name="UserSetupUrl" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="c7f6459d-9e6e-b4bc-cae8-65f5a3785403" name="SendIndirectMessageNull" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="3aa4e498-fd14-8274-22da-895436c1659e" name="AssociateUnencrypted" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="152e7a3a-21f9-eabf-0065-08597a0cc9a6" name="AuthorizationHeaderScheme" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="efd570c9-5e74-17e4-f332-ac257c8e8aff" name="RealmReturnToMismatchV1" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="70773edf-2d4a-3c4e-05ac-905fb0fb0fb9" name="AddTwoAttributes" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="3e676e31-3b6d-9d12-febd-d632ece804ec" name="RPRejectsMismatchingAssociationAndSessionBitLengths" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="5460f9c6-ec9d-969d-5aff-b946d6776e25" name="CtorWithNullProtocolMessage" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> @@ -329,14 +328,13 @@ <TestLink id="1b66e135-bdab-c2ed-18d8-aa89b46a57fc" name="RPRejectsUnrecognizedAssociationType" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="df7e24cb-f909-e894-e4cb-83f86d24c741" name="ProtocolVersionWithoutMessage" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="0f211309-a85e-5983-dc7b-434a63f9ffd9" name="GetNullVersion" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="a18ae750-318b-bb1f-c2b3-c31da845c085" name="Count" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="4735a071-3c06-509b-05f5-912ab0e39f13" name="InvalidRealmBadProtocol" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="924b5295-0d39-5c89-8794-22518091e05a" name="CtorNullToString" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="46877579-ba4c-c30c-38c4-9c6ad3922390" name="InsufficientlyProtectedMessageReceived" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="066ce22f-103c-56ee-0250-d9e28d43ffcd" name="Values" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="64b41c6c-2b67-af35-0c93-df41bd6f2dbb" name="Store" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="d5912d3e-441c-a20e-20a2-0b9f0220a762" name="ParameterNames" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="a145f430-8062-5ad7-0cf5-b51eba0f8de7" name="HttpsSignatureGeneration" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="1e915672-5691-70d6-163e-caf1a473f822" name="UnsignedExtensionsAreIgnored" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="f334cc44-b2d0-2d67-358a-532def3bee80" name="ContainsKeyValuePair" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="c205832e-711c-62d0-5f5e-78f1250ea7cc" name="AuthenticationTimeUtcSetNull" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="dc3cb63a-c195-1569-ec8f-d81b5a348b13" name="TransportWithoutMessage" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="e2287de6-cbd2-4298-3fb8-297013749e70" name="SendIndirectMessageFormPostNullFields" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> @@ -345,8 +343,8 @@ <TestLink id="a8bd3730-1660-dca9-87ec-23bc9dc39ab9" name="CtorGoodXriSecure" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="809afd59-8f10-ce37-6630-06b59351a05a" name="CommonProperties" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="ca9f3da7-e19f-b58b-54fe-54fa56ab9556" name="AddByKeyAndValue" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="95e1fc36-2500-2721-1919-35e9e8349a1c" name="AddPolicyMultipleTimes" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="3df1f62b-4fb4-d399-cf7f-40b72001d9d6" name="CtorUnsolicited" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="30a8eab6-6423-26af-da1a-ec304935fe43" name="RemoveNonexistentHandle" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="a59c5dc0-de4d-8136-8545-2e2e9616de46" name="SerializationWithXri" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="aedfde98-4357-5b63-7dca-cced838ee416" name="Provider" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="ae8b7cba-696e-2362-d5e1-79a9c202a994" name="EmptyLineLoose" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="e7aacb49-62ef-637d-ada2-0a12d836414d" name="ExtensionFactory" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> @@ -354,6 +352,7 @@ <TestLink id="3772f97f-3fe6-3fc0-350d-4085e7c4329e" name="Test" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="fc7af2d7-6262-d761-335b-ef3ec029484d" name="DeserializeVerifyElementOrdering" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="5dd2e6c9-ff0f-48de-3a1a-cbab61370843" name="SetCountNegative" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="736a09b4-f56e-0176-6c1c-81db0fbe3412" name="CtorUriHttpsSchemeSecure" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="cc9200bf-1399-d40a-9754-6415f0b7bcf8" name="CreateRequest" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="0aa1bc22-0b26-3977-5983-5dc4a454cea5" name="OptionalNullableStruct" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="7ea157db-cf32-529f-f1d3-b3351f17725a" name="CtorSimpleServiceProvider" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> @@ -363,77 +362,78 @@ <TestLink id="870cce9d-5b17-953c-028f-827ec8b56da2" name="GetInvalidMessageType" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="09b892f2-96e9-45b7-d082-b0bb512c1dd4" name="RequiredNonNullableStruct" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="2e23dc5a-93ea-11a5-d00d-02d294794e5f" name="AssociateDiffieHellmanOverHttps" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="d067c55c-3715-ed87-14a2-c07349813c94" name="IsDirectedIdentity" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="40e1121e-8ff3-df73-203b-04baab671a0c" name="ImplicitConversionToStringTests" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="724cc3e8-c13c-5cc6-ce14-25c51ad6297d" name="Mode" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="3027bfe5-3612-7089-16cc-d6a2a556a41f" name="Transport" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="90f06a50-7b81-05ec-3dc0-7b3e8ade8cfa" name="NormalizeCase" storage="..\bin\debug\dotnetopenauth.test.dll" enabled="false" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="a6ea74e5-8681-4eb4-a51b-5051e5f7603c" name="NonFieldOrPropertyMember" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="f17128c1-5953-5391-ed75-c33774eacbfc" name="LastLineNotTerminated" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="b384002f-26a9-7dde-c3f6-9ceff34dd8e2" name="GetRequest" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="5dcd69c3-e979-7316-4551-a73fe4645dcd" name="SecuritySettings" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="599add9e-e9eb-5e8a-ce6b-6dc73c2bb408" name="DataContractNamespace" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="7fb8d29c-c8ea-7f88-ed42-ae7368d6a429" name="CtorNullStore" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="264cd371-e830-c09b-5511-18f54d4c69d5" name="RespondSimpleValue" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="035cd43a-23d5-af91-12ee-0a0ce78b3548" name="XrdsDiscoveryFromHttpHeader" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="f69f1c0c-e258-95fb-4fcb-ad14bfc40e3c" name="Discover" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="d067c55c-3715-ed87-14a2-c07349813c94" name="IsDirectedIdentity" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="f3af5fd8-f661-dc4f-4539-947b081a8b54" name="ReceivedReplayProtectedMessageJustOnce" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="ef20222d-b2e2-d593-17fa-512041020643" name="InvalidRealmNullString" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="50986611-9de6-a112-2fe8-691210989f45" name="IsTypeUriPresent" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="d647fd93-40b3-24d5-25fc-661c0d58335c" name="SendIndirectMessageFormPostNullMessage" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="309fdc0f-150c-5992-9a79-63be5f479d89" name="RequiredProtection" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="01e33554-07cc-ff90-46f8-7d0ca036c9f6" name="ToDictionaryNull" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="889ba616-43dc-8a7f-ee13-46288969d617" name="ParameterNames" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="e9a5efc6-fde8-8fa4-0bda-2675a4a7e06b" name="DefaultReferenceTypeDeclaredPropertyHasNoKey" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="84e718d7-bb82-e7d1-31be-471e2c154053" name="Item" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="a260d196-066f-b0ae-a40e-fb9d962b28a4" name="XrdsDirectDiscovery_20" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="a18ae750-318b-bb1f-c2b3-c31da845c085" name="Count" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="f533bf9e-daa1-b26a-4789-372f3a9291d6" name="TryRequireSslAdjustsIdentifier" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="a6295302-c78f-4122-ce88-94fc30980262" name="CtorStringNoSchemeSecure" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="a63c169c-4e9a-bcba-b7cd-c4c5280cd652" name="PrepareMessageForSendingNonExtendableMessage" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="10c44d72-2789-2afe-3b27-091dea97546e" name="RequestNull" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="9684f7bf-cdda-a2c5-0822-29cb0add3835" name="ResponseNonceGetter" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="e3a3b3b6-e05f-0a99-e20c-af91a9065819" name="AssociateRequestDeterminedBySecuritySettings" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="f334cc44-b2d0-2d67-358a-532def3bee80" name="ContainsKeyValuePair" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="4ba7ca33-72f1-3fc6-d37c-65134eda904d" name="AddDeclaredValueThatAlreadyExists" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="5e0c892d-7ad8-6d56-1f1d-2fb6236670d6" name="CtorDefault" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="736a09b4-f56e-0176-6c1c-81db0fbe3412" name="CtorUriHttpsSchemeSecure" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="e03f0038-5bb7-92f2-87a7-00a7d2c31a77" name="MessageExpirationWithoutTamperResistance" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="069995aa-4136-610b-3f41-df80a138c244" name="AppendQueryArgsNullUriBuilder" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="71564ca7-7845-92b3-7433-2f2beeb6b9f7" name="VerifyNonZeroLengthOnNonEmpty" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="b191e585-49d9-df8e-c156-307f798db169" name="AddAttributeRequest" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="1c5d54e2-d96a-d3a6-aeac-95f137b96421" name="CommonMethods" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="889ba616-43dc-8a7f-ee13-46288969d617" name="ParameterNames" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="dd5be0e2-a1fc-3369-0b11-78b728eeaba5" name="CtorNullUri" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="d6b120b7-fc16-6815-927e-af382cd44bbd" name="ReceivedInvalidSignature" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="29e45877-ca7a-85de-5c39-6d43befe1a1e" name="DiscoveryRequireSslWithInsecureXrdsButSecureLinkTags" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="ef6cebca-f8da-edf6-0217-8bb854710090" name="DiscoveryCommunityInameDelegateWithoutCanonicalID" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="ae1ef27c-fbfe-c57e-a1e0-c1ef9de4ea23" name="CommonProperties" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="f533bf9e-daa1-b26a-4789-372f3a9291d6" name="TryRequireSslAdjustsIdentifier" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="188ce83b-3117-adb5-4b89-12f2b09be1de" name="CtorSimpleConsumer" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="c4001e1c-75ad-236b-284f-318905d2bc3a" name="CreateRequestOnNonOpenID" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="efd570c9-5e74-17e4-f332-ac257c8e8aff" name="RealmReturnToMismatchV1" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="beb086e9-5eb7-fb8f-480a-70ede9efd70d" name="CreateRequests" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="50594141-1a00-b4ab-d794-5b06e67327e5" name="IsTypeUriPresentNull" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="f17424d2-ed4b-1ea0-a339-733f5092d9d0" name="MaximumAuthenticationAgeTest" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="e9c2087b-1c52-5bb9-bf4e-9046cf281e36" name="DiscoverRequireSslWithInsecureRedirect" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="924b5295-0d39-5c89-8794-22518091e05a" name="CtorNullToString" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="06b350b0-79d1-9393-7620-cd919061898c" name="ParseEndUserSuppliedUriIdentifier" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="a9f7897c-b299-807b-0612-384732cd10c9" name="Ctor" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="456c3468-9081-4879-7e7e-8299bd8c7f68" name="IsReadOnly" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="0f36556d-ece7-eb70-8597-a9d085165c2c" name="Sign" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="47706bc6-7bee-0385-62b4-4f9cec6cc702" name="CtorWithTextMessage" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="5435ab79-de25-e2fc-0b2d-b05d5686d27d" name="IsUrlWithinRealmTests" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="06ec5bce-5a78-89c3-0cda-fa8bddfea27d" name="SetCountZero" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="93041654-1050-3878-6b90-656a7e2e3cfd" name="CtorDefault" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="10a8b8e5-e147-838c-0708-be98d5e4490e" name="CtorFull" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="d6088ffe-ccf5-9738-131b-0fc1bc7e3707" name="TrimFragment" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="188ce83b-3117-adb5-4b89-12f2b09be1de" name="CtorSimpleConsumer" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="439c8c16-2ba5-eb3b-b631-ce50ec48eba0" name="CtorNullMember" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="85a71d28-5f2f-75ce-9008-94982438bb5f" name="EqualityTests" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="fa2e5bbd-4c41-f2b1-e875-38c6ef011fa1" name="RandomCharactersTest" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="dd9e3279-2d7e-e88e-ccfa-ef213055fc3d" name="SendDirectedNoRecipientMessage" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="c351c660-d583-d869-0129-2e312665d815" name="CtorBlank" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="30a8eab6-6423-26af-da1a-ec304935fe43" name="RemoveNonexistentHandle" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="6b218bf7-a4e9-8dac-d2c2-9bc3ee3ffc3e" name="EqualityTests" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="3fe0b432-dbb4-b334-e504-a83fe5ffdbaf" name="EqualityTests" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="a14ddf08-796b-6cf1-a9bf-856dd50520fa" name="RequiredProtection" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="bf73c7f2-33b1-8e18-c4f6-cb8609388754" name="DiscoveryRequireSslWithInsecureXrdsInSecureHttpHeader" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="f967c0af-c04c-d156-4faf-8978bfcab5d7" name="RequiredNullableStruct" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="b09311d4-4dea-6786-3e59-9c62fe16e301" name="ParameterNames" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="84e718d7-bb82-e7d1-31be-471e2c154053" name="Item" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="501fa941-c1ac-d4ef-56e7-46827788b571" name="GetRequestNoContext" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="d474830d-3636-522c-1564-1b83e7a844d3" name="EmptyLine" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="e03f0038-5bb7-92f2-87a7-00a7d2c31a77" name="MessageExpirationWithoutTamperResistance" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="94ba9fd3-851d-13b2-e273-6294b167c13e" name="HttpsSignatureVerification" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="ef8a2274-4e58-0dde-4c5c-7f286865fc3a" name="SendReplayProtectedMessageSetsNonce" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="1d5fb5a9-e15c-d99c-7a7e-95a4c4d123c2" name="DirectRequestsUsePost" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="3c438474-63f3-b56c-dcba-1ed923fcdbdd" name="CreateResponse" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="e8337858-a320-8aad-51aa-402e65a90b75" name="ReplayDetectionTest" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> - <TestLink id="11108b79-f360-9f7c-aebc-2d11bebff96a" name="ReadFromRequestForm" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="4735a071-3c06-509b-05f5-912ab0e39f13" name="InvalidRealmBadProtocol" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="a1a0178c-cd4a-1651-8535-3c9ee3d40821" name="ToDictionaryWithNullKey" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> + <TestLink id="182203f3-5a16-b736-ea8c-b59f6bf7df66" name="InvalidRealmTwoWildcards2" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="83aba528-c8ea-f464-177e-2ea8ae2cfd0b" name="Birthdates" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> <TestLink id="864578a5-61a2-bc5d-1d19-17093885bea3" name="InvalidRealmTwoWildcards1" storage="..\bin\debug\dotnetopenauth.test.dll" type="Microsoft.VisualStudio.TestTools.TestTypes.Unit.UnitTestElement, Microsoft.VisualStudio.QualityTools.Tips.UnitTest.ObjectModel, PublicKeyToken=b03f5f7f11d50a3a" /> </TestLinks> |