我正在玩DotNetOpenAuth示例,试图了解如何正确地与OpenID集成。其中一个样本称为OpenIdRelyingPartyMvc。它有两个代码部分,我不确定它们如何影响功能。
在Global.asax.cs中:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = string.Empty }); // Parameter defaults
routes.MapRoute(
"Root",
string.Empty,
new { controller = "Home", action = "Index", id = string.Empty });
如果我删除映射“Route”的最后一行,似乎没有任何影响:映射“Default”似乎就足够了。为什么有“路线”路线?
在HomeController.cs
中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");
}
}
如果我删除“AppendHeader”调用并测试样本,它仍然有效!我知道这个标题已经足够了,我只是不能让示例应用程序依赖它:它可以在没有设置的情况下工作。如果我在Xrds方法中设置断点,则永远不会触发它。
答案 0 :(得分:3)
global.asax.cs中的路由可能是多余的。
您要删除的X-XRDS-Location
标题对于OpenID流并非绝对必要,但如果您在没有注销的情况下发布您的依赖方应用程序Yahoo! and other OpenID Providers may warn the user that your site is not legit。
您可以通过运行OpenIdProviderWebForms示例并使用该示例OP中的标识符登录RP来本地测试(因此观察正在执行的Home / Xrds操作)。在登录期间,OP将查询RP的XRDS,并在要求您确认登录的网页上,它将指示“RP验证”是成功还是失败。如果成功了,你应该好好去。