summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/System.Web.Abstractions.dllbin87032 -> 84800 bytes
-rw-r--r--lib/System.Web.Mvc.dllbin113144 -> 187200 bytes
-rw-r--r--lib/System.Web.Mvc.xml3136
-rw-r--r--lib/System.Web.Routing.dllbin70648 -> 68416 bytes
-rw-r--r--samples/ConsumerWpf/ConsumerWpf.csproj2
-rw-r--r--samples/ProviderPortal/.gitignore5
-rw-r--r--samples/ProviderPortal/App_Data/.gitignore1
-rw-r--r--samples/ProviderPortal/App_Data/Users.xml23
-rw-r--r--samples/ProviderPortal/Code/CustomStore.cs89
-rw-r--r--samples/ProviderPortal/Code/CustomStoreDataSet.Designer.cs621
-rw-r--r--samples/ProviderPortal/Code/CustomStoreDataSet.xsc9
-rw-r--r--samples/ProviderPortal/Code/CustomStoreDataSet.xsd33
-rw-r--r--samples/ProviderPortal/Code/CustomStoreDataSet.xss12
-rw-r--r--samples/ProviderPortal/Code/ReadOnlyXmlMembershipProvider.cs270
-rw-r--r--samples/ProviderPortal/Code/TracePageAppender.cs13
-rw-r--r--samples/ProviderPortal/Code/URLRewriter.cs61
-rw-r--r--samples/ProviderPortal/Code/Util.cs56
-rw-r--r--samples/ProviderPortal/Default.aspx53
-rw-r--r--samples/ProviderPortal/Global.asax1
-rw-r--r--samples/ProviderPortal/Global.asax.cs82
-rw-r--r--samples/ProviderPortal/OpenIdProviderWebForms.csproj191
-rw-r--r--samples/ProviderPortal/ProfileFields.ascx1024
-rw-r--r--samples/ProviderPortal/ProfileFields.ascx.cs137
-rw-r--r--samples/ProviderPortal/ProfileFields.ascx.designer.cs286
-rw-r--r--samples/ProviderPortal/Properties/AssemblyInfo.cs35
-rw-r--r--samples/ProviderPortal/Provider.ashx1
-rw-r--r--samples/ProviderPortal/Provider.ashx.cs61
-rw-r--r--samples/ProviderPortal/Site.Master20
-rw-r--r--samples/ProviderPortal/TracePage.aspx16
-rw-r--r--samples/ProviderPortal/TracePage.aspx.cs21
-rw-r--r--samples/ProviderPortal/TracePage.aspx.designer.cs43
-rw-r--r--samples/ProviderPortal/Web.config192
-rw-r--r--samples/ProviderPortal/decide.aspx34
-rw-r--r--samples/ProviderPortal/decide.aspx.cs75
-rw-r--r--samples/ProviderPortal/decide.aspx.designer.cs70
-rw-r--r--samples/ProviderPortal/favicon.icobin0 -> 318 bytes
-rw-r--r--samples/ProviderPortal/images/dotnetopenid_tiny.gifbin0 -> 3548 bytes
-rw-r--r--samples/ProviderPortal/login.aspx17
-rw-r--r--samples/ProviderPortal/login.aspx.cs22
-rw-r--r--samples/ProviderPortal/login.aspx.designer.cs25
-rw-r--r--samples/ProviderPortal/op_xrds.aspx19
-rw-r--r--samples/ProviderPortal/server.aspx53
-rw-r--r--samples/ProviderPortal/server.aspx.cs18
-rw-r--r--samples/ProviderPortal/server.aspx.designer.cs25
-rw-r--r--samples/ProviderPortal/styles.css10
-rw-r--r--samples/ProviderPortal/user.aspx17
-rw-r--r--samples/ProviderPortal/user.aspx.cs33
-rw-r--r--samples/ProviderPortal/user.aspx.designer.cs43
-rw-r--r--samples/ProviderPortal/user_xrds.aspx24
-rw-r--r--samples/RelyingPartyClassicAsp/MembersOnly.asp27
-rw-r--r--samples/RelyingPartyClassicAsp/default.asp39
-rw-r--r--samples/RelyingPartyClassicAsp/images/dotnetopenid_tiny.gifbin0 -> 3548 bytes
-rw-r--r--samples/RelyingPartyClassicAsp/images/openid_login.gifbin0 -> 237 bytes
-rw-r--r--samples/RelyingPartyClassicAsp/login.asp45
-rw-r--r--samples/RelyingPartyClassicAsp/logout.asp12
-rw-r--r--samples/RelyingPartyClassicAsp/styles.css23
-rw-r--r--samples/RelyingPartyMvc/.gitignore5
-rw-r--r--samples/RelyingPartyMvc/Content/Site.css265
-rw-r--r--samples/RelyingPartyMvc/Controllers/HomeController.cs20
-rw-r--r--samples/RelyingPartyMvc/Controllers/UserController.cs60
-rw-r--r--samples/RelyingPartyMvc/Default.aspx9
-rw-r--r--samples/RelyingPartyMvc/Global.asax1
-rw-r--r--samples/RelyingPartyMvc/Global.asax.cs26
-rw-r--r--samples/RelyingPartyMvc/Properties/AssemblyInfo.cs35
-rw-r--r--samples/RelyingPartyMvc/RelyingPartyMvc.csproj130
-rw-r--r--samples/RelyingPartyMvc/Views/Home/Index.aspx15
-rw-r--r--samples/RelyingPartyMvc/Views/Home/xrds.aspx22
-rw-r--r--samples/RelyingPartyMvc/Views/Shared/Site.Master51
-rw-r--r--samples/RelyingPartyMvc/Views/Shared/Site.Master.cs4
-rw-r--r--samples/RelyingPartyMvc/Views/Shared/Site.Master.designer.cs25
-rw-r--r--samples/RelyingPartyMvc/Views/User/Index.aspx12
-rw-r--r--samples/RelyingPartyMvc/Views/User/Login.aspx20
-rw-r--r--samples/RelyingPartyMvc/Views/Web.config20
-rw-r--r--samples/RelyingPartyMvc/Web.config156
-rw-r--r--samples/RelyingPartyWebForms/.gitignore5
-rw-r--r--samples/RelyingPartyWebForms/Code/CustomStore.cs137
-rw-r--r--samples/RelyingPartyWebForms/Code/CustomStoreDataSet.Designer.cs976
-rw-r--r--samples/RelyingPartyWebForms/Code/CustomStoreDataSet.cs4
-rw-r--r--samples/RelyingPartyWebForms/Code/CustomStoreDataSet.xsc9
-rw-r--r--samples/RelyingPartyWebForms/Code/CustomStoreDataSet.xsd46
-rw-r--r--samples/RelyingPartyWebForms/Code/CustomStoreDataSet.xss13
-rw-r--r--samples/RelyingPartyWebForms/Code/CustomStoreDataSet1.Designer.cs990
-rw-r--r--samples/RelyingPartyWebForms/Code/State.cs32
-rw-r--r--samples/RelyingPartyWebForms/Code/TracePageAppender.cs13
-rw-r--r--samples/RelyingPartyWebForms/Default.aspx13
-rw-r--r--samples/RelyingPartyWebForms/Global.asax1
-rw-r--r--samples/RelyingPartyWebForms/Global.asax.cs65
-rw-r--r--samples/RelyingPartyWebForms/MembersOnly/Default.aspx106
-rw-r--r--samples/RelyingPartyWebForms/MembersOnly/Web.config18
-rw-r--r--samples/RelyingPartyWebForms/PrivacyPolicy.aspx7
-rw-r--r--samples/RelyingPartyWebForms/Properties/AssemblyInfo.cs35
-rw-r--r--samples/RelyingPartyWebForms/RelyingPartyWebForms.csproj187
-rw-r--r--samples/RelyingPartyWebForms/Settings.StyleCop1
-rw-r--r--samples/RelyingPartyWebForms/Site.Master39
-rw-r--r--samples/RelyingPartyWebForms/TracePage.aspx16
-rw-r--r--samples/RelyingPartyWebForms/TracePage.aspx.cs20
-rw-r--r--samples/RelyingPartyWebForms/TracePage.aspx.designer.cs43
-rw-r--r--samples/RelyingPartyWebForms/Web.config81
-rw-r--r--samples/RelyingPartyWebForms/ajaxlogin.aspx91
-rw-r--r--samples/RelyingPartyWebForms/ajaxlogin.aspx.cs56
-rw-r--r--samples/RelyingPartyWebForms/ajaxlogin.aspx.designer.cs106
-rw-r--r--samples/RelyingPartyWebForms/images/attention.pngbin0 -> 714 bytes
-rw-r--r--samples/RelyingPartyWebForms/images/dotnetopenid_tiny.gifbin0 -> 3548 bytes
-rw-r--r--samples/RelyingPartyWebForms/images/openid_login.gifbin0 -> 237 bytes
-rw-r--r--samples/RelyingPartyWebForms/images/yahoo.pngbin0 -> 7607 bytes
-rw-r--r--samples/RelyingPartyWebForms/login.aspx30
-rw-r--r--samples/RelyingPartyWebForms/login.aspx.cs75
-rw-r--r--samples/RelyingPartyWebForms/login.aspx.designer.cs70
-rw-r--r--samples/RelyingPartyWebForms/loginProgrammatic.aspx15
-rw-r--r--samples/RelyingPartyWebForms/loginProgrammatic.aspx.cs106
-rw-r--r--samples/RelyingPartyWebForms/loginProgrammatic.aspx.designer.cs70
-rw-r--r--samples/RelyingPartyWebForms/logout.aspx13
-rw-r--r--samples/RelyingPartyWebForms/m/Login.aspx17
-rw-r--r--samples/RelyingPartyWebForms/m/Login.aspx.cs13
-rw-r--r--samples/RelyingPartyWebForms/m/Login.aspx.designer.cs43
-rw-r--r--samples/RelyingPartyWebForms/styles.css10
-rw-r--r--samples/RelyingPartyWebForms/xrds.aspx22
-rw-r--r--samples/Settings.StyleCop5
-rw-r--r--src/DotNetOpenAuth.sln51
-rw-r--r--src/DotNetOpenAuth.vsmdi154
120 files changed, 11725 insertions, 80 deletions
diff --git a/lib/System.Web.Abstractions.dll b/lib/System.Web.Abstractions.dll
index cd88be0..317242e 100644
--- a/lib/System.Web.Abstractions.dll
+++ b/lib/System.Web.Abstractions.dll
Binary files differ
diff --git a/lib/System.Web.Mvc.dll b/lib/System.Web.Mvc.dll
index 598cf6f..10b038f 100644
--- a/lib/System.Web.Mvc.dll
+++ b/lib/System.Web.Mvc.dll
Binary files differ
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 &apos;{0}&apos; on controller type &apos;{1}&apos; 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 &apos;{0}&apos; is outside the valid range of the enumeration type &apos;{1}&apos;..
+ </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 &apos;{0}&apos; 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 &apos;{0}&apos; 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 &apos;{0}&apos; is invalid..
+ </summary>
+ </member>
+ <member name="P:System.Web.Mvc.Resources.MvcResources.Common_ViewNotFound">
+ <summary>
+ Looks up a localized string similar to The view &apos;{0}&apos; 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 &apos;{0}&apos; could not be found on controller &apos;{1}&apos;..
+ </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 &apos;{0}&apos; 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 &apos;{0}&apos;. 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 &apos;{0}&apos; did not return a controller for a controller named &apos;{1}&apos;..
+ </summary>
+ </member>
+ <member name="P:System.Web.Mvc.Resources.MvcResources.ControllerBuilder_MissingIControllerFactory">
+ <summary>
+ Looks up a localized string similar to The controller factory type &apos;{0}&apos; 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 &apos;{0}&apos; 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 &apos;{0}&apos;. If the controller doesn&apos;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 &apos;{0}&apos; 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 &apos;{0}&apos; 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 &apos;{0}&apos; 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 &apos;{0}&apos; of type &apos;{1}&apos;..
+ </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 &apos;{0}&apos; is of type &apos;{1}&apos; but needs to be of type &apos;{2}&apos;..
+ </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 &apos;{0}&apos;. 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 &apos;{0}&apos; 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 &apos;{0}&apos; 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 &apos;{0}&apos; on type &apos;{1}&apos; 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 &apos;{0}&apos; on controller &apos;{1}&apos; since the parameter &apos;{2}&apos; 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 &apos;{0}&apos; on controller &apos;{1}&apos; 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 &apos;{0}&apos; of non-nullable type &apos;{1}&apos; for method &apos;{2}&apos; in &apos;{3}&apos;. 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 &apos;{0}&apos; of type &apos;{1}&apos; for method &apos;{2}&apos; in &apos;{3}&apos;. 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 &apos;{0}&apos; for method &apos;{1}&apos; in &apos;{2}&apos;. The dictionary contains a value of type &apos;{3}&apos;, but the parameter requires a value of type &apos;{4}&apos;..
+ </summary>
+ </member>
+ <member name="P:System.Web.Mvc.Resources.MvcResources.ReflectedParameterBindingInfo_MultipleConverterAttributes">
+ <summary>
+ Looks up a localized string similar to The parameter &apos;{0}&apos; on method &apos;{1}&apos; 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 &apos;{0}&apos; to type &apos;{1}&apos; 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 &apos;{0}&apos; to type &apos;{1}&apos; 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 &apos;{0}&apos; but this dictionary requires a model item of type &apos;{1}&apos;..
+ </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&lt;TViewItem&gt;..
+ </summary>
+ </member>
+ <member name="P:System.Web.Mvc.Resources.MvcResources.ViewUserControl_RequiresViewDataProvider">
+ <summary>
+ Looks up a localized string similar to The ViewUserControl &apos;{0}&apos; 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&lt;TViewItem&gt;..
+ </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 &apos;{0}&apos; 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 &apos;{0}&apos; must derive from ViewPage, ViewPage&lt;TViewData&gt;, ViewUserControl, or ViewUserControl&lt;TViewData&gt;..
+ </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
index 98ce397..93f0ff8 100644
--- a/lib/System.Web.Routing.dll
+++ b/lib/System.Web.Routing.dll
Binary files differ
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>
+ &nbsp;
+ </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>
+ &nbsp;<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>
+ &nbsp;
+ <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>
+ &nbsp;
+ </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.&nbsp; 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
new file mode 100644
index 0000000..beb3cb5
--- /dev/null
+++ b/samples/ProviderPortal/favicon.ico
Binary files differ
diff --git a/samples/ProviderPortal/images/dotnetopenid_tiny.gif b/samples/ProviderPortal/images/dotnetopenid_tiny.gif
new file mode 100644
index 0000000..c4ed4f5
--- /dev/null
+++ b/samples/ProviderPortal/images/dotnetopenid_tiny.gif
Binary files differ
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.&nbsp; 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.&nbsp; 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.&nbsp; And the COM interfaces
+ that DotNetOpenAuth exposes are a very limited subset of full functionality
+ available to .NET clients.&nbsp; 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
new file mode 100644
index 0000000..c4ed4f5
--- /dev/null
+++ b/samples/RelyingPartyClassicAsp/images/dotnetopenid_tiny.gif
Binary files differ
diff --git a/samples/RelyingPartyClassicAsp/images/openid_login.gif b/samples/RelyingPartyClassicAsp/images/openid_login.gif
new file mode 100644
index 0000000..cde836c
--- /dev/null
+++ b/samples/RelyingPartyClassicAsp/images/openid_login.gif
Binary files differ
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 &copy; 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
new file mode 100644
index 0000000..8003700
--- /dev/null
+++ b/samples/RelyingPartyWebForms/images/attention.png
Binary files differ
diff --git a/samples/RelyingPartyWebForms/images/dotnetopenid_tiny.gif b/samples/RelyingPartyWebForms/images/dotnetopenid_tiny.gif
new file mode 100644
index 0000000..c4ed4f5
--- /dev/null
+++ b/samples/RelyingPartyWebForms/images/dotnetopenid_tiny.gif
Binary files differ
diff --git a/samples/RelyingPartyWebForms/images/openid_login.gif b/samples/RelyingPartyWebForms/images/openid_login.gif
new file mode 100644
index 0000000..cde836c
--- /dev/null
+++ b/samples/RelyingPartyWebForms/images/openid_login.gif
Binary files differ
diff --git a/samples/RelyingPartyWebForms/images/yahoo.png b/samples/RelyingPartyWebForms/images/yahoo.png
new file mode 100644
index 0000000..3129217
--- /dev/null
+++ b/samples/RelyingPartyWebForms/images/yahoo.png
Binary files differ
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>