Web api - сохранение пользовательских данных в течение всего жизненного цикла приложения, такого как Session - PullRequest
0 голосов
/ 26 августа 2018

Как сохранять пользовательские данные в чистом приложении Web Api на протяжении всей жизни приложения, например, Session, чтобы при каждом запросе мы могли использовать сохраненные пользовательские данные. Я видел, что в WEB API каждый запрос является отдельным и не имеет связи с предыдущим запросом и поэтому не может использовать Session.

Кто-нибудь может мне помочь?

Ответы [ 2 ]

0 голосов
/ 26 августа 2018

Вам необходимо установить Microsoft.Owin от Nuget. Затем добавьте это в свой начальный класс.

public void ConfigureAuth(IAppBuilder app) 
        { 

            var OAuthOptions = new OAuthAuthorizationServerOptions 
            { 
                AllowInsecureHttp = true, 
                TokenEndpointPath = new PathString("/token"), 
                AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(20), 
                Provider = new SimpleAuthorizationServerProvider() 
            }; 

            app.UseOAuthBearerTokens(OAuthOptions); 
            app.UseOAuthAuthorizationServer(OAuthOptions); 
            app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions()); 

            HttpConfiguration config = new HttpConfiguration(); 
            WebApiConfig.Register(config); 
        } 

        public void Configuration(IAppBuilder app) 
        { 
            ConfigureAuth(app); 
            GlobalConfiguration.Configure(WebApiConfig.Register); 
        }

Тогда нужно добавить провайдера типа

[EnableCors(origins: "*", headers: "*", methods: "*")]  
    public class SimpleAuthorizationServerProvider : OAuthAuthorizationServerProvider  
    {  
        public override async Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)  
        {  
            context.Validated(); //   
        }  

        public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)  
        {  
            var identity = new ClaimsIdentity(context.Options.AuthenticationType);  
            context.OwinContext.Response.Headers.Add("Access-Control-Allow-Origin", new[] { "*" });  

            using (var db = new TESTEntities())  
            {  
                if (db != null)  
                {  
                    var empl = db.Employees.ToList();  
                    var user = db.Users.ToList();  
                    if (user != null)  
                    {  
                        if (!string.IsNullOrEmpty(user.Where(u => u.UserName == context.UserName && u.Password == context.Password).FirstOrDefault().Name))  
                        {  
                            identity.AddClaim(new Claim("Age", "16"));  

                            var props = new AuthenticationProperties(new Dictionary<string, string>  
                            {  
                                {  
                                    "userdisplayname", context.UserName  
                                },  
                                {  
                                     "role", "admin"  
                                }  
                             });  

                            var ticket = new AuthenticationTicket(identity, props);  
                            context.Validated(ticket);  
                        }  
                        else  
                        {  
                            context.SetError("invalid_grant", "Provided username and password is incorrect");  
                            context.Rejected();  
                        }  
                    }  
                }  
                else  
                {  
                    context.SetError("invalid_grant", "Provided username and password is incorrect");  
                    context.Rejected();  
                }  
                return;  
            }  
        }  
    }

Вы можете добавить номер претензии, если требуется. Затем измените свой WebApiConfig открытый класс WebApiConfig
{
общедоступный статический регистр void (конфигурация HttpConfiguration)
{
// Конфигурация веб-API и сервисы

        EnableCorsAttribute cors = new EnableCorsAttribute("*", "*", "*");  
        config.EnableCors(cors);  

        // Web API routes  
        config.MapHttpAttributeRoutes();  

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

        var jsonFormatter = config.Formatters.OfType<JsonMediaTypeFormatter>().First();  
        jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();  
    }  
}

Затем проверьте свой токен, как enter image description here

Затем вы передаете свой токен с помощью заголовка авторизации. Тогда получите ваши претензии.

Пример запроса API enter image description here

Пример кода для получения данных претензий

var principal = this.Request.GetRequestContext().Principal as ClaimsPrincipal;
var claims = principal.Claims.ToList();
            var age = claims.FirstOrDefault(c => c.Type == "Age")?.Value;
0 голосов
/ 26 августа 2018

Вы можете использовать переменную сеанса, такую ​​как:

Session["FirstName"] = FirstNameTextBox.Text;
Session["LastName"] = LastNameTextBox.Text;

Чтобы использовать переменные сеанса:

// When retrieving an object from session state, cast it to 
// the appropriate type.
ArrayList stockPicks = (ArrayList)Session["StockPicks"];

// Write the modified stock picks list back to session state.
Session["StockPicks"] = stockPicks;

Для получения дополнительной информации перейдите по ссылке: MSDN

...