I have a problem that I have been struggling with for quite some time now. I am trying to implement a web api to our project, that should work much like episervers service api. I've made it so far that I can get request a token, but I can't get my attribute routings to work.
What makes me confused is that I have pretty much copy/pasted episervers implemention of their service api (which works), but mine won't. Obvisously I am missing something, or is there some kinda magic behind episervers attribute routes?
Here is the code for my Web API project:
ApplicationBuilderExtensions.cs
public static class ApplicationBuilderExtensions
{
public static IAppBuilder UseServiceApi(this IAppBuilder app) where TManager : UserManager where TUser : class, IUser
{
var options = new OAuthAuthorizationServerOptions
{
AllowInsecureHttp = true,
TokenEndpointPath = new PathString("/serviceapi/token"),
AccessTokenExpireTimeSpan = TimeSpan.FromMinutes(20),
Provider = new IdentityAuthorizationServerProvider()
};
app.UseOAuthAuthorizationServer(options);
app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());
return app;
}
}
IntegrationInitialization.cs
[InitializableModule, ModuleDependency(typeof(EPiServer.Web.InitializationModule))]
public class IntegrationInitialization : IInitializableModule
{
public void Initialize(InitializationEngine context)
{
GlobalConfiguration.Configure(config =>
{
var current = (IHostBufferPolicySelector)config.Services.GetService(typeof(IHostBufferPolicySelector));
config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;
config.Services.Replace(typeof(IHostBufferPolicySelector), new StreamingInputPolicy(current));
config.Formatters.JsonFormatter.SerializerSettings = new JsonSerializerSettings();
config.Formatters.XmlFormatter.UseXmlSerializer = true;
config.SuppressDefaultHostAuthentication();
config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
});
}
public void Uninitialize(InitializationEngine context)
{
}
}
BrandsController.cs
[RoutePrefix("serviceapi/rest")]
public class BrandsController : ApiController
{
[HttpGet]
[ResponseType(typeof(IEnumerable))]
[Route("brands")]
public virtual IHttpActionResult GetBrands()
{
var brands = new List();
brands.Add(new Brand() { Code = "hej" });
return Ok(brands);
}
}
And this is Startup.cs in our Main project
app.UseServiceApi, SiteUser>(); // My own web api
app.UseServiceApiIdentityTokenAuthorization, SiteUser>(); // Episerver service api
And then we have a initialization module in our Main project that map the attribute routes
[InitializableModule]
[ModuleDependency(typeof(EPiServer.Commerce.Initialization.InitializationModule))]
public class SiteInitialization : IConfigurableModule, IInitializableModule
{
public void Initialize(InitializationEngine context)
{
GlobalFilters.Filters.Add(new HandleErrorAttribute());
AreaRegistration.RegisterAllAreas();
}
public void ConfigureContainer(ServiceConfigurationContext context)
{
DependencyResolver.SetResolver(new StructureMapDependencyResolver(context.StructureMap()));
GlobalConfiguration.Configure(config =>
{
config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.LocalOnly;
config.Formatters.JsonFormatter.SerializerSettings = new JsonSerializerSettings();
config.Formatters.XmlFormatter.UseXmlSerializer = true;
config.DependencyResolver = new StructureMapResolver(context.StructureMap());
config.MapHttpAttributeRoutes();
});
}
public void Uninitialize(InitializationEngine context)
{
}
}
I am running on Episerver 10.10.4.0 and Episerver.Commerce 11.4.1.0 If you're missing some code, feel free to ask and I will update.
Hi,
I have a problem that I have been struggling with for quite some time now.
I am trying to implement a web api to our project, that should work much like episervers service api.
I've made it so far that I can get request a token, but I can't get my attribute routings to work.
What makes me confused is that I have pretty much copy/pasted episervers implemention of their service api (which works), but mine won't.
Obvisously I am missing something, or is there some kinda magic behind episervers attribute routes?
Here is the code for my Web API project:
ApplicationBuilderExtensions.cs
IntegrationInitialization.cs
BrandsController.cs
And this is Startup.cs in our Main project
And then we have a initialization module in our Main project that map the attribute routes
I am running on Episerver 10.10.4.0 and Episerver.Commerce 11.4.1.0
If you're missing some code, feel free to ask and I will update.
Thank you!
/ Kristoffer