ممنونم
تبدیل html به pdf با کیفیت بالا
ممنونم
public class RabbitMqConfiguration { public string HostName { get; set; } public string Username { get; set; } public string Password { get; set; } }
public interface IRabbitMqService { IConnection CreateChannel(); } public class RabbitMqService : IRabbitMqService { private readonly RabbitMqConfiguration _configuration; public RabbitMqService(IOptions<RabbitMqConfiguration> options) { _configuration = options.Value; } public IConnection CreateChannel() { ConnectionFactory connection = new ConnectionFactory() { UserName = _configuration.Username, Password = _configuration.Password, HostName = _configuration.HostName }; connection.DispatchConsumersAsync = true; var channel = connection.CreateConnection(); return channel; } }
public static class StartupExtension { public static void AddCommonService(this IServiceCollection services, IConfiguration configuration) { services.Configure<RabbitMqConfiguration>(a => configuration.GetSection(nameof(RabbitMqConfiguration)).Bind(a)); services.AddSingleton<IRabbitMqService, RabbitMqService>(); } }
<ItemGroup> <PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="5.0.0" /> <PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="5.0.0" /> <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="5.0.0" /> <PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="5.0.0" /> <PackageReference Include="Microsoft.Extensions.Options" Version="5.0.0" /> <PackageReference Include="RabbitMQ.Client" Version="6.2.1" /> </ItemGroup>
public interface IConsumerService { Task ReadMessgaes(); } public class ConsumerService : IConsumerService, IDisposable { private readonly IModel _model; private readonly IConnection _connection; public ConsumerService(IRabbitMqService rabbitMqService) { _connection = rabbitMqService.CreateChannel(); _model = _connection.CreateModel(); _model.QueueDeclare(_queueName, durable: true, exclusive: false, autoDelete: false); _model.ExchangeDeclare("UserExchange", ExchangeType.Fanout, durable: true, autoDelete: false); _model.QueueBind(_queueName, "UserExchange", string.Empty); } const string _queueName = "User"; public async Task ReadMessgaes() { var consumer = new AsyncEventingBasicConsumer(_model); consumer.Received += async (ch, ea) => { var body = ea.Body.ToArray(); var text = System.Text.Encoding.UTF8.GetString(body); Console.WriteLine(text); await Task.CompletedTask; _model.BasicAck(ea.DeliveryTag, false); }; _model.BasicConsume(_queueName, false, consumer); await Task.CompletedTask; } public void Dispose() { if (_model.IsOpen) _model.Close(); if (_connection.IsOpen) _connection.Close(); } }
public class ConsumerHostedService : BackgroundService { private readonly IConsumerService _consumerService; public ConsumerHostedService(IConsumerService consumerService) { _consumerService = consumerService; } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { await _consumerService.ReadMessgaes(); } }
public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; set; } public void ConfigureServices(IServiceCollection services) { services.AddCommonService(Configuration); services.AddSingleton<IConsumerService, ConsumerService>(); services.AddHostedService<ConsumerHostedService>(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { } }
[Route("api/[controller]/[action]")] [ApiController] public class RabbitController : ControllerBase { private readonly IRabbitMqService _rabbitMqService; public HomeController(IRabbitMqService rabbitMqService) { _rabbitMqService = rabbitMqService; } [HttpPost] public IActionResult SendMessage() { using var connection = _rabbitMqService.CreateChannel(); using var model = connection.CreateModel(); var body = Encoding.UTF8.GetBytes("Hi"); model.BasicPublish("UserExchange", string.Empty, basicProperties: null, body: body); return Ok(); } }
public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; set; } public void ConfigureServices(IServiceCollection services) { services.AddControllers(); services.AddCommonService(Configuration); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { app.UseRouting(); app.UseEndpoints(endpoints => { endpoints.MapDefaultControllerRoute(); }); } }
{ "RabbitMqConfiguration": { "HostName": "localhost", "Username": "guest", "Password": "guest" } }
version: "3.2" services: rabbitmq: image: rabbitmq:3-management-alpine container_name: 'rabbitmq' ports: - 5672:5672 - 15672:15672
using System.Collections.Generic; using System.IO; using Lucene.Net.Analysis.Standard; using Lucene.Net.Documents; using Lucene.Net.Index; using Lucene.Net.Store; using LuceneSearch.Core.Model; using LuceneSearch.Core.Utils; namespace LuceneSearch.Core { public static class CreateIndex { static readonly Lucene.Net.Util.Version _version = Lucene.Net.Util.Version.LUCENE_30; public static Document MapPostToDocument(Post post) { var postDocument = new Document(); postDocument.Add(new Field("Id", post.Id.ToString(), Field.Store.YES, Field.Index.NOT_ANALYZED)); var titleField = new Field("Title", post.Title, Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.WITH_POSITIONS_OFFSETS); titleField.Boost = 3; postDocument.Add(titleField); postDocument.Add(new Field("Body", post.Body.RemoveHtmlTags(), Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.WITH_POSITIONS_OFFSETS)); return postDocument; } public static void CreateFullTextIndex(IEnumerable<Post> dataList, string path) { var directory = FSDirectory.Open(new DirectoryInfo(path)); var analyzer = new StandardAnalyzer(_version); using (var writer = new IndexWriter(directory, analyzer, create: true, mfl: IndexWriter.MaxFieldLength.UNLIMITED)) { foreach (var post in dataList) { writer.AddDocument(MapPostToDocument(post)); } writer.Optimize(); writer.Commit(); writer.Close(); directory.Close(); } } } }
namespace LuceneSearch.Core.Model { public class SearchResult { public int Id { set; get; } public string Title { set; get; } } }
using System.Collections.Generic; using System.IO; using Lucene.Net.Index; using Lucene.Net.Search; using Lucene.Net.Store; using LuceneSearch.Core.Model; using LuceneSearch.Core.Utils; namespace LuceneSearch.Core { public static class AutoComplete { private static IndexSearcher _searcher; /// <summary> /// Get terms starting with the given prefix /// </summary> /// <param name="prefix"></param> /// <param name="maxItems"></param> /// <returns></returns> public static IList<SearchResult> GetTermsScored(string indexPath, string prefix, int maxItems = 10) { if (_searcher == null) _searcher = new IndexSearcher(FSDirectory.Open(new DirectoryInfo(indexPath)), true); var resultsList = new List<SearchResult>(); if (string.IsNullOrWhiteSpace(prefix)) return resultsList; prefix = prefix.ApplyCorrectYeKe(); var results = _searcher.Search(new PrefixQuery(new Term("Title", prefix)), null, maxItems); if (results.TotalHits == 0) { results = _searcher.Search(new PrefixQuery(new Term("Body", prefix)), null, maxItems); } foreach (var doc in results.ScoreDocs) { resultsList.Add(new SearchResult { Title = _searcher.Doc(doc.Doc).Get("Title"), Id = int.Parse(_searcher.Doc(doc.Doc).Get("Id")) }); } return resultsList; } } }
using System.Text; using System.Web.Mvc; using LuceneSearch.Core; using System.Web; namespace LuceneSearch.Controllers { public class HomeController : Controller { static string _indexPath = HttpRuntime.AppDomainAppPath + @"App_Data\idx"; public ActionResult Index(int? id) { if (id.HasValue) { //todo: do something } return View(); //Show the page } public virtual ActionResult ScoredTerms(string q) { if (string.IsNullOrWhiteSpace(q)) return Content(string.Empty); var result = new StringBuilder(); var items = AutoComplete.GetTermsScored(_indexPath, q); foreach (var item in items) { var postUrl = this.Url.Action(actionName: "Index", controllerName: "Home", routeValues: new { id = item.Id }, protocol: "http"); result.AppendLine(item.Title + "|" + postUrl); } return Content(result.ToString()); } } }
@{ ViewBag.Title = "جستجو"; var scoredTermsUrl = Url.Action(actionName: "ScoredTerms", controllerName: "Home"); var bulletImage = Url.Content("~/Content/Images/bullet_shape.png"); } <h2> جستجو</h2> <div align="center"> @Html.TextBox("term", "", htmlAttributes: new { dir = "ltr" }) <br /> جهت آزمایش lu را وارد نمائید </div> @section scripts { <script type="text/javascript"> EnableSearchAutocomplete('@scoredTermsUrl', '@bulletImage'); </script> }
function EnableSearchAutocomplete(url, img) { var formatItem = function (row) { if (!row) return ""; return "<img src='" + img + "' /> " + row[0]; } $(document).ready(function () { $("#term").autocomplete(url, { dir: 'rtl', minChars: 2, delay: 5, mustMatch: false, max: 20, autoFill: false, matchContains: false, scroll: false, width: 300, formatItem: formatItem }).result(function (evt, row, formatted) { if (!row) return; window.location = row[1]; }); }); }
result.AppendLine(item.Title + "|" + postUrl); return Content(result.ToString());
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="LuceneSearch.WebForms.Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width" /> <title>جستجو</title> <link href="Content/Site.css" rel="stylesheet" type="text/css" /> <script src="Scripts/jquery-1.7.1.min.js" type="text/javascript"></script> <script src="Scripts/jquery.autocomplete.js" type="text/javascript"></script> <script src="Scripts/custom.js" type="text/javascript"></script> </head> <body dir="rtl"> <h2> جستجو</h2> <form id="form1" runat="server"> <div align="center"> <asp:TextBox runat="server" dir="ltr" ID="term"></asp:TextBox> <br /> جهت آزمایش lu را وارد نمائید </div> </form> <script type="text/javascript"> EnableSearchAutocomplete('Search.ashx', 'Content/Images/bullet_shape.png'); </script> </body> </html>
using System.Text; using System.Web; using LuceneSearch.Core; namespace LuceneSearch.WebForms { public class Search : IHttpHandler { static string _indexPath = HttpRuntime.AppDomainAppPath + @"App_Data\idx"; public void ProcessRequest(HttpContext context) { string q = context.Request.QueryString["q"]; if (string.IsNullOrWhiteSpace(q)) { context.Response.Write(string.Empty); context.Response.End(); } var result = new StringBuilder(); var items = AutoComplete.GetTermsScored(_indexPath, q); foreach (var item in items) { var postUrl = "Default.aspx?id=" + item.Id; result.AppendLine(item.Title + "|" + postUrl); } context.Response.ContentType = "text/plain"; context.Response.Write(result.ToString()); context.Response.End(); } public bool IsReusable { get { return false; } } } }
result.AppendLine(item.Title + "|" + postUrl); context.Response.Write(result.ToString());
AutoMapper کتابخانهای برای نگاشت اطلاعات یک شیء به شیءایی دیگر به صورت خودکار میباشد.
در این مقاله چگونگی رسیدگی به Null property را در AutoMapper بررسی خواهیم کرد. فرض کنید شیء منبع دارای یک خاصیت Null است و میخواهید به وسیله Automaper شیء منبع را به مقصد نگاشت نمایید. اما میخواهید در صورت Null بودن شیء مبدا، یک مقدار پیش فرض برای شیء مقصد در نظر گرفته شود .
برای نمونه کلاسuser را که در آن از کلاس Address یک خاصیت تعریف شده، در نظر بگیرید. اگر مقدار آدرس در شیء منبع خالی بود شاید شما بخواهید مقدار آن را به صورت empty string و یا با یک مقدار پیش فرض در مقصد مقدار دهی کنید.
همانند مثال زیر :
public class UserSource { public Address Address{get;set;} } public class UserDestination { public string Address{get;set;} }
AutoMapper.Mapper.CreateMap<UserSource, UserDestination>() .ForMember(dest => dest.Address , opt => opt.NullSubstitute("Address not found") );
var model = AutoMapper.Mapper.Map<UserSource, UserDestination>(user); var models = AutoMapper.Mapper.Map<IEnumerable<UserSource>, IEnumerable<UserDestination>>(users);
TimeSpan.FromMinutes(0)
if (validate) { var manager = context.OwinContext.GetUserManager<ApplicationUserManager>(); var userId = getUserIdCallback(context.Identity); if (manager != null) { var user = await manager.FindByIdAsync(userId).WithCurrentCulture(); var reject = true; // Refresh the identity if the stamp matches, otherwise reject if (user != null && manager.SupportsUserSecurityStamp) { var securityStamp = context.Identity.FindFirstValue(Constants.DefaultSecurityStampClaimType); if (securityStamp == await manager.GetSecurityStampAsync(userId).WithCurrentCulture()) { reject = false; // Regenerate fresh claims if possible and resign in if (user.IsChangedPermissions && regenerateIdentityCallback != null) { var identity = await regenerateIdentityCallback.Invoke(manager, user).WithCurrentCulture();