【问题标题】:LightSwitch 2013: Calling the OData ApplicationData.svc service with forms authenticationLightSwitch 2013:使用表单身份验证调用 OData ApplicationData.svc 服务
【发布时间】:2015-08-02 02:11:25
【问题描述】:

我编写了一个简单的 LightSwitch 2013 应用程序,它通过添加客户实体来管理“客户”并让 LightSwitch 处理附加的 SQL Server 文件。 LightSwitch 使用 restful 服务 (ApplicationData.svc) 公开数据,可以这样调用:

https://somesite.azurewebsites.net/ApplicationData.svc/Customers

现在,除了“包含的”HTML 和 Silverlight 桌面客户端之外,我想添加另一个 Windows 8 通用应用程序 客户端应用程序(商店和电话)。因此,我需要以编程方式调用 restful 服务。

我在启用 表单身份验证 时遇到了麻烦。所以我尝试通过代码以编程方式登录。我不完全知道发生了什么,我试图用 fiddler 分析网络上的流量。我看到有一个名为(GET)的“LogIn.aspx”页面,然后使用用户填写的凭据进行回发(POST)。

我总是收到“401 - 未授权”响应。

我的最佳猜测是这样的:

        var cookieContainer = new CookieContainer();
        var clientHandler = new HttpClientHandler { CookieContainer = cookieContainer };

        using (var client = new HttpClient(clientHandler))
        {
            client.BaseAddress = new Uri("https://somesite.azurewebsites.net");

            // Get the login page
            var loginGet = client.GetAsync("/LogIn.aspx").Result;
            loginGet.EnsureSuccessStatusCode();

            // Post-back to login page with credentials
            var loginPost = client.PostAsync("/LogIn.aspx", new FormUrlEncodedContent(new Dictionary<string, string> {
                { "LoginUser$Username", "myname" },
                { "LoginUser$Password", "mypw"},
                { "LoginUser$LoginButton", "LOG+IN" },
            })).Result;
            loginPost.EnsureSuccessStatusCode();

            // try to get the customers list via OData
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

            // Getting a "401 - unauthorized" here:
            var response = client.GetAsync("ApplicationData.svc/Customers").Result;
            response.EnsureSuccessStatusCode();
        }

有人能把我踢到正确的方向吗?

PS: 我知道,如果我编写了一个 .NET 客户端,我可以只使用“Lightswitch.ApplicationData”类来无缝调用 restful 服务。此处建议使用此解决方案:

authenticate Lightswitch Odata service that uses forms authentication

但就我而言,我有一个 Windows 8 通用应用程序,因此我无法引用 LightSwitch 生成的“服务器”程序集,该程序集基于 .NET 运行时。

【问题讨论】:

    标签: rest odata forms-authentication visual-studio-lightswitch win-universal-app


    【解决方案1】:

    所以我终于找到了....我完全错误地处理 cookie ....

    带有表单身份验证的 lightswitch OData 服务通过基本身份验证公开。

    https://usernamme:password@somesite.azurewebsites.net/ApplicationData/Customers
    

    当然要确保您使用的是 SSL!

    见这篇文章:Exposing LightSwitch Application Data

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-25
      • 1970-01-01
      • 2015-07-24
      • 1970-01-01
      • 1970-01-01
      • 2011-06-24
      相关资源
      最近更新 更多