基于.NET PCL的一个异步访问的MediaWiki客户端库,支持.NET Framework 4.5、ASP.NET Core 1.0、Xamarin.iOS和Xamarin.Android,MediaWiki API最低尝试过MediaWiki 1.19 (Wikia)。欢迎前来围观!
坑址:https://github.com/CXuesong/WikiClientLibrary
其他MediaWiki客户端库:https://www.mediawiki.org/wiki/API:Client_code
宣传一下:好像还没想好可以怎么宣传。总之,支持大部分常见的增删查改API,支持生成器,支持文件上传,查询结果无痛分页(使用IAsyncEnumerable)。
下面给点客户端程序的小样(好吧其实复制的README.md)
static async Task HelloWikiWorld()
{
// Create a MediaWiki API client.
var wikiClient = new WikiClient
{
// UA of Client Application. The UA of WikiClientLibrary will
// be append to the end of this when sending requests.
ClientUserAgent = "ConsoleTestApplication1/1.0",
};
// Create a MediaWiki Site instance with the URL of API endpoint.
var site = await Site.CreateAsync(wikiClient, "https://test2.wikipedia.org/w/api.php");
// Access site information via Site.SiteInfo
Console.WriteLine("API version: {0}", site.SiteInfo.Generator);
// Access user information via Site.UserInfo
Console.WriteLine("Hello, {0}!", site.UserInfo.Name);
Console.WriteLine("You're in the following groups: {0}.", string.Join(",", site.UserInfo.Groups));
// Site login
if (Confirm($"Do you want to login into {site.SiteInfo.SiteName}?"))
{
await site.LoginAsync(Input("Username"), Input("Password"));
Console.WriteLine("You have successfully logged in as {0}.", site.UserInfo.Name);
}
// Find out more members in Site class, such as
// site.Namespaces
// site.InterwikiMap
// Page Operations
// Fetch information and content
var page = new Page(site, site.SiteInfo.MainPage);
Console.WriteLine("Retriving {0}...", page);
await page.RefreshAsync(PageQueryOptions.FetchContent);
Console.WriteLine("Last touched at {0}.", page.LastTouched);
Console.WriteLine("Last revision {0} by {1} at {2}.", page.LastRevisionId,
page.LastRevision.UserName, page.LastRevision.TimeStamp);
Console.WriteLine("Content length: {0} bytes ----------", page.ContentLength);
Console.WriteLine(page.Content);
// Purge the page
if (await page.PurgeAsync())
Console.WriteLine(" The page has been purged successfully.");
// Edit the page
page = new Page(site, "Project:Sandbox");
await page.RefreshAsync(PageQueryOptions.FetchContent);
if (!page.Exists) Console.WriteLine("Warning: The page {0} doesn't exist.", page);
page.Content += "\n\n'''Hello''' ''world''!";
await page.UpdateContentAsync("Test edit from WikiClientLibrary.");
Console.WriteLine("{0} has been saved. RevisionId = {1}.", page, page.LastRevisionId);
// Find out more operations in Page class, such as
// page.MoveAsync()
// page.DeleteAsync()
// Logout
await site.LogoutAsync();
Console.WriteLine("You have successfully logged out.");
}

你好,有个问题想请教下你。
我在用VS2015打开你的mediawiki 0.5.0.5版本项目时候,提示WikiClientLibrary加载失败,显示该项目需要用户输入,有关更多信息,请重新加载该项目。错误提示显示为WikiClientLibrary.csproj : error : 项目的默认 XML 命名空间必须为 MSBuild XML 命名空间。如果项目是用 MSBuild 2003 格式创建的,请将 xmlns=”http://schemas.microsoft.com/developer/msbuild/2003″ 添加到 元素中。如果项目是用旧的 1.0 或 1.2 格式创建的,请将其转换为 MSBuild 2003 格式。 我按照要求加入编码格式,然后又提示无法识别元素 中的特性“Version”。
哦,我最近把整个项目升级到了VS2017……所以……抱歉啦😭
不过VS2015还是可以引用打包之后的NuGet程序包的。
多谢您的回复,因为想写个基于wiki的windows程序,所以看到你的项目想看下你的项目源码,学习下您的代码。再次感谢您的回复,希望以后有问题还能得到您的解答多谢。