首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WebClient FormsAuthentication in WebAPI

WebClient FormsAuthentication in WebAPI
EN

Stack Overflow用户
提问于 2015-06-30 15:45:20
回答 1查看 701关注 0票数 1

code服务代码

代码语言:javascript
复制
[Authorize]
public class RegistrationController : ApiController
{
    [AllowAnonymous]
    [HttpPost]
    public string Get(string user,string pass)
    {
        if (user=="abc"&&pass=="cba")
            FormsAuthentication.SetAuthCookie("HomeUser", false);
        return "Home";
    }
    [HttpGet]
    public string Post()
    {
        return "Post";
    }
}

来自控制台的窗体身份验证

代码语言:javascript
复制
class CookieWebClient : WebClient
    {
        public CookieContainer CookieContainer { get; private set; }

        /// <summary>
        /// This will instanciate an internal CookieContainer.
        /// </summary>
        public CookieWebClient()
        {
            this.CookieContainer = new CookieContainer();
        }

        /// <summary>
        /// Use this if you want to control the CookieContainer outside this class.
        /// </summary>
        public CookieWebClient(CookieContainer cookieContainer)
        {
            this.CookieContainer = cookieContainer;
        }

        protected override WebRequest GetWebRequest(Uri address)
        {
            var request = base.GetWebRequest(address) as HttpWebRequest;
            if (request == null) return base.GetWebRequest(address);
            request.CookieContainer = CookieContainer;
            return request;
        }
    }

该程序的目标是登录到Web服务,然后查询安全授权方法,然后重置授权。怎么做才是最简单的方法?

代码语言:javascript
复制
using (var client = new CookieWebClient())
        {
            var values = new NameValueCollection
{
    { "user", "abc" },
    { "pass", "cba" },
};
            client.UploadValues("http://localhost:1401/Get/","POST", values);

            // If the previous call succeeded we now have a valid authentication cookie
            // so we could download the protected page
            string result = client.DownloadString("http://localhost:1401");
        }

我在在线UploadValues上有一个错误405未知方法。你能帮帮我吗?我通过表单使用授权,因为我发现这个方法尽可能简单,同时也是安全的。

P.S. WebApiConfig代码:

代码语言:javascript
复制
config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "{api}/{id}",
            defaults: new { controller="Registration",
                api=RouteParameter.Optional,
                id = RouteParameter.Optional }
        );
        config.Filters.Add(new AuthorizeAttribute());
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-30 16:10:52

检查你的WebApiConfig类。api的默认脚手架路径通常是这样的。

代码语言:javascript
复制
config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

在你的情况下,你可能是这样的。但这将取决于您注册的routeTemplate。

代码语言:javascript
复制
client.UploadValues("http://localhost:1401/api/Registration/","POST", values);

此外,我建议不要调用您的方法或操作Get()或Post(),这些名称很容易与httpGet和httpPost混淆。

如果您认为表单身份验证阻止您向url投递,请注释掉注册控制器中的授权标记,然后尝试再次发布。如果它仍然不起作用,那么可能是您url而不是身份验证。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31142795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档