How to Use AspNetCore.XmlRpc

Raymond Tang Raymond Tang 2351 0.83 index 10/9/2017

This post provides the detailed steps about how to use AspNetCore.XmlRpc in your .net core projects.

1. Install the package

You can install the package through NuGet PowerShell module:

Install-Package AspNetCore.XmlRpc

2. Configurations

In your appsettings.json, add the following configuration section under root:

"XmlRpc": {      "GenerateSummary": "true",      "SummaryEndpoint": "/api/xmlrpc/summary",      "RsdEndpoint": "/api/xmlrpc/rsd",      "Endpoint": "/api/xmlrpc/endpoint",      "EngineName": "AspNetCore.XmlRpc",      "BlogIdTokenName": "blogId",      "HomePageEndpointPattern": "/Blog/{blogId}",      "ManifestEndpoint": "/api/xmlrpc/manifest"    }

Configuration item Description Sample value
GenerateSummary Whether to enable summary endpoint true
SummaryEndpoint URL for summary endpoint /api/xmlrpc/summary
RsdEndpoint URL for Real Simple Discovery end point. This is used by client tools like Open Live Writer to detect services /api/xmlrpc/rsd
Endpoint URL for the main remote procedure calls endpoint /api/xmlrpc/endpoint
EngineName Engine name that implemented the service AspNetCore.XmlRpc
BlogIdTokenName The token name for blogId. blogId
HomePageEndpointPattern Blog home page URL /Blog/{blogId}
ManifestEndpoint URL for manifest endpoint which describe the capabilities of MetaWeblog implementation. /api/xmlrpc/manifest

3. Change Startup.cs class

3.1 Register service

You need to implement your own IMetaWeblogXmlRpcService.

// This method gets called by the runtime. Use this method to add services to the container.          public void ConfigureServices(IServiceCollection services)          {              // Configure XmlRpc              services.Configure<XmlRpcOptions>(Configuration.GetSection("XmlRpc"));

// Add meta weblog              services.AddMetaWeblog<MetaWeblogXmlRpcService, DefaultMetaWeblogEndpointProvider>();

services.AddMvc();          }

3.2 Use middleware

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, IDatabaseInitializer dbInitializer)          {

//…

app.UseStaticFiles();

// Use XmlRpc middleware              app.UseMetaWeblog();

app.UseMvc(routes =>              {                  routes.MapRoute(                      name: "default",                      template: "{controller=Home}/{action=Index}/{id?}");                  routes.MapRoute(                      name: "areas",                      template: "{area:exists}/{controller=Home}/{action=Index}/{id?}");

});          }

3.3 Implement your own MetaWeblog XML-RPC services.

You can also inject any scoped or singleton services into your own service. For example the following sample shows that the service depends on a number of other services.

public class MetaWeblogXmlRpcService : IMetaWeblogXmlRpcService      {          private readonly IConfigService configService;          private readonly IContextUnitOfWork unitOfWork;          private readonly UserManager<ApplicationUser> userManager;          private readonly SignInManager<ApplicationUser> signInManager;          private readonly ILogger<MetaWeblogXmlRpcService> logger;          private readonly IHttpContextAccessor contextAccessor;          private readonly IOptions<BlogConfig> blogOptions;          private readonly IOptions<SiteConfig> siteOptions;          private readonly IHostingEnvironment environment;

public MetaWeblogXmlRpcService(IConfigService configService,              IContextUnitOfWork unitOfWork,              UserManager<ApplicationUser> userManager,              SignInManager<ApplicationUser> signInManager,              ILogger<MetaWeblogXmlRpcService> logger,              IHttpContextAccessor contextAccessor,              IOptions<BlogConfig> blogOptions,              IOptions<SiteConfig> siteOptions,              IHostingEnvironment environment)          {

}

}

This step is necessary to ensure that client tools like Open Live Writer can automatically detect the settings.

<link rel="EditURI" type="application/rsd+xml" title="RSD" href="@string.Concat(options.Value.RsdEndpoint,'/','myblogid' )" /> <link rel="wlwmanifest" type="application/wlwmanifest+xml" href="@string.Concat(options.Value.ManifestEndpoint,'/','myblogid' )" />

4. Sample project

https://github.com/FahaoTang/AspNetCore.XmlRpc

xml-rpc

Join the Discussion

View or add your thoughts below

Comments