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)
{}
}
3.5 Add links to your blog home page
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' )" />