小编nic*_*son的帖子

ASP.Net Web API - 授权标题空白

我不得不使用.NET(最初用Ruby编写)重写现有的REST API.从客户端的角度来看,它必须与旧API完全相同 - 即客户端代码不必更改.当前的API需要基本身份验证.因此,要调用旧API,以下工作完美: -

        var wc = new System.Net.WebClient();
        var myCache = new CredentialCache();
        myCache.Add(new Uri(url), "Basic", new NetworkCredential("XXX", "XXX"));
        wc.Credentials = myCache;
        var returnBytes = wc.DownloadData("http://xxxx");
Run Code Online (Sandbox Code Playgroud)

(出于安全原因,我不得不省略真实的URL /用户名/密码等).

现在我正在使用带有MVC4的ASP.Net Web API编写新的API.我有一个奇怪的问题,找不到其他人有完全相同的问题.为了支持基本身份验证,我遵循了以下指南:

http://sixgun.wordpress.com/2012/02/29/asp-net-web-api-basic-authentication/

有一件事,我把代码放在Application_Start()事件中的Global.asax.cs文件中的"钩子处理程序"中(我没猜到,所以我猜).

无论如何,如果我使用上面的代码调用我的API(我已在IIS中部署),Authorization标头始终为null,并且上面的失败,401 Unauthorized.但是,如果我使用此代码手动设置标头,它可以正常工作 - 即授权标头现在存在,我能够验证用户.

    private void SetBasicAuthHeader(WebClient request, String userName, String userPassword)
    {
        string authInfo = userName + ":" + userPassword;
        authInfo = Convert.ToBase64String(Encoding.Default.GetBytes(authInfo));
        request.Headers["Authorization"] = "Basic " + authInfo;
    }
   .......
    var wc = new System.Net.WebClient();
    SetBasicAuthHeader(request, "XXXX", "XXXX");
    var returnBytes = wc.DownloadData("http://xxxx");
Run Code Online (Sandbox Code Playgroud)

虽然这有效,但对我来说并不好,因为现有API的现有用户不会手动设置标题. …

asp.net rest asp.net-mvc-4 asp.net-web-api

7
推荐指数
1
解决办法
7220
查看次数

在C#中将本地用户添加到本地组

我可以很好地添加用户,但是我无法将其添加到本地组.我收到这个错误: -

无法将成员添加到本地组或从本地组中删除该成员,因为该成员不存在.

这是我正在使用的代码.我做错了什么?它只是本地机器,我绝对有权这样做,而且该组织确实存在.

        try
        {
            using (DirectoryEntry hostMachineDirectory = new DirectoryEntry("WinNT://" + serverName))
            {
                DirectoryEntries entries = hostMachineDirectory.Children;

                foreach (DirectoryEntry entry in entries)
                {
                    if (entry.Name.Equals(userName, StringComparison.CurrentCultureIgnoreCase))
                    {
                        // Update password
                        entry.Invoke("SetPassword", password);
                        entry.CommitChanges();
                        return true;
                    }
                }

                DirectoryEntry obUser = entries.Add(userName, "User");
                obUser.Properties["FullName"].Add("Used to allow users to login to Horizon. User created programmatically.");
                obUser.Invoke("SetPassword", password);
                obUser.Invoke("Put", new object[] {
                "UserFlags",
                0x10000
                });

                obUser.CommitChanges();

                foreach (string group in groups)
                {
                    DirectoryEntry grp = hostMachineDirectory.Children.Find(group, "group");
                    if (grp != null) …
Run Code Online (Sandbox Code Playgroud)

c# directoryentry

2
推荐指数
1
解决办法
8942
查看次数

ASP.Net Web API - 远程服务器返回错误:(405)方法不允许

我正在使用新的MVC4 ASP.Net Web API系统.

我在使用WebClient的测试项目中调用我的API.如果我使用GET或POST,它可以正常工作.如果我使用其他任何东西,我会得到Method Not Allowed.我实际上是通过注入以下标题来"伪造"该方法.我这样做是因为我的最终用户也必须这样做,因为一些防火墙的限制.

我通过IIS调用URL(即不是cassini) - 例如http:// localhost/MyAPI/api/Test

wc.Headers.Add("X-HTTP-Method", "PUT");
Run Code Online (Sandbox Code Playgroud)

我尝试在IIS中调整脚本映射,但由于没有扩展,我不知道我要调整的是什么!

有任何想法吗?关心尼克

asp.net-mvc-4 asp.net-web-api

0
推荐指数
1
解决办法
6455
查看次数