نظرات مطالب
امکان تغییر شکل سراسری URLهای تولیدی توسط برنامه‌های ASP.NET Core 2.2
یک نکته‌ی تکمیلی: بهبود کارآیی IOutboundParameterTransformer تهیه شده
با توجه به مطلب « چگونه Regex سریعتری داشته باشیم؟ » بهتر است regex نوشته شده را کامپایل کرد تا به حداکثر کارآیی رسید:
using System.Text.RegularExpressions;
using Microsoft.AspNetCore.Routing;

public class CustomUrlTransformer : IOutboundParameterTransformer
{
    private static readonly Regex _camelCasingRegEx = new Regex("([a-z])([A-Z])", RegexOptions.Compiled);

    public string TransformOutbound(object value)
    {
        return value == null ? null : _camelCasingRegEx.Replace(value.ToString(), "$1-$2");
    }
}
نظرات مطالب
سفارشی سازی ASP.NET Core Identity - قسمت چهارم - User Claims
با سلام
در عملیات برگشت درگاه پرداخت در صورت وجود [Athorize] مقادیر برگشتی null است. و  در صورت عدم استفاده از [Athorize]  اطلاعات UserClaim کاربر null است. 
  [Authorize]
 public async Task<IActionResult> CallBackResult(long token, string status, string orderId, string terminalNo, string rrn)
  {
          
   var userId = User.Identity.GetId();
        
   //موفقیت بودن عملیات پرداخت
   if (status == "0" && token > 0)
    {

    }
}


نظرات مطالب
پیاده سازی JSON Web Token با ASP.NET Web API 2.x
جهت تکمیل بحث
قسمت JwtAuthorizeAttribute  و در تکه کد زیر:  
            var claimsIdentity = actionContext.RequestContext.Principal.Identity as ClaimsIdentity;
            if (claimsIdentity == null)
            {
                // this is not our issued token
                this.HandleUnauthorizedRequest(actionContext);
                return;
            }
وقتی که توکن کاربر منقضی میشه، خط:
var userId = claimsIdentity.FindFirst(ClaimTypes.UserData).Value;
ایجاد Exception میکنه، بخاطر خالی بودن Claims; 
با توجه با آموزشی بودن مطلب و اینکه خومون میتونیم متناسب با نیازمون کاستومش کنیم، بهتر است که شرط قبل رو به صورت زیر مدیریت کنیم:
if (claimsIdentity == null || !claimsIdentity.Claims.Any())
            {
                // ...
            }
نظرات مطالب
ارتقاء به ASP.NET Core 1.0 - قسمت 18 - کار با ASP.NET Web API
نکته‌ای در مورد « تغییر تنظیمات اولیه‌ی خروجی‌های ASP.NET Web API » انتهای بحث
حالت پیش فرض خروجی ASP.NET Core 1.0 RTM دقیقا همان camel case است. اگر می‌خواهید آن‌را به Pascal Case تغییر دهید، می‌توانید به صورت زیر عمل کنید:
services.AddMvc().AddJsonOptions(opt =>
{
    var resolver = opt.SerializerSettings.ContractResolver;
    if (resolver != null)
    {
       var res = resolver as DefaultContractResolver;
       res.NamingStrategy = null; // this is what removes the camelcasing
    }
});
نظرات مطالب
پیاده سازی JSON Web Token با ASP.NET Web API 2.x
- در مورد حالت‌هایی مانند «با برنامه خودم» این مطلب را مطالعه کنید.
- لطفا تصویر خطا را ارسال نکنید. متن کامل آن‌را ارسال کنید.
- در این تصویر، به سختی می‌توان مشاهده کرد که can not read string undefined را ذکر کرده‌است. علت اینجا است که چون در فایل Index.html متغیر var jwtToken بدون مقدار دهی اولیه است، مقدار undefined را به سمت سرور ارسال می‌کند.
var bar;
typeof bar; // "undefined"
این بررسی را به ابتدای متدهای سمت کاربر اضافه کنید:
if(jwtToken == null) // will check if the value is undefined or null.
{
  alert('you need to login first');
  return;
}
نظرات مطالب
EF Code First #12
تنظیماتی که برای سازگاری با StructureMap 3 انجام دادید یه مشکلی داره: ارورهای ۴۰۴ به ارورهای ۵۰۰ تغییر می‌کنن چون InvalidOperationException رها می‌شه. برای این قضیه من چنین کاری کردم:
public class StructureMapControllerFactory : DefaultControllerFactory
    {
        protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
        {
            if (controllerType == null && requestContext.HttpContext.Request.Url != null)
                return base.GetControllerInstance(requestContext, controllerType);

            return ObjectFactory.GetInstance(controllerType) as Controller;
        }
    }
نظرات مطالب
چگونگی دسترسی به فیلد و خاصیت غیر عمومی
آیا می‌توان به کمک رفلکشن به خصوصیتی که مثلا Set ندارد مقدار دهی کرد. بعنوان مثال
class Program
{
  static void Main(string[] args)
  {
      Book book = new Book();
      var codeprop = book.GetType().GetProperty("Code", BindingFlags.Public | BindingFlags.Instance);
      codeprop.SetValue(book, 20, null);
      var value = codeprop.GetValue(book, null);
  }
}

public class Book
{
  public int code;
  public int Code
  {
      get { return code; }
  }
}
نظرات مطالب
تبدیل HTML فارسی به PDF با استفاده از افزونه‌ی XMLWorker کتابخانه‌ی iTextSharp
برای رفع مشکل محو شدن Div، کدهای کلاس ElementsCollector مطلب جاری را به نحو زیر تغییر دهید:
        public void Add(IWritable htmlElement)
        {
            var writableElement = htmlElement as WritableElement;
            if (writableElement == null)
                return;

            foreach (var element in writableElement.Elements())
            {
                var div = element as PdfDiv;
                if (div != null)
                {
                    foreach (var divChildElement in div.Content)
                    {
                        fixNestedTablesRunDirection(divChildElement);
                        _paragraph.Add(divChildElement);
                    }
                }
                else
                {
                    fixNestedTablesRunDirection(element);
                    _paragraph.Add(element);
                }
            }
        }
نظرات مطالب
ASP.NET MVC #21
سلام ، باتشکر از آموزش خوبتون.
قسمت آخر آموزشتون (فعال سازی اعتبار سنجی سمت کلاینت) رو نتونستم متوجه بشم.
من این ویو رو توسط Ajax.ActionLink فراخونی کردم. برای اینکه اعتبار سنجی کلاینت اون کار کنه کدهای زیر کافیه؟
@model MvcApplication1.Models.Com
<script>
    var onSuccess = function (result) {
        $.validator.unobtrusive.parse("#result");
    };
</script>
<div id="result" >
@using (Ajax.BeginForm(
    "SendCommentAction",
    "Home",
    null,
    new AjaxOptions { 
        OnSuccess = "onSuccess",
        UpdateTargetId = "result"
    },
    null)
)
{
    @Html.TextBoxFor(x=>x.Contect) <br/>
@Html.ValidationMessageFor(x=>x.Contect)
<br/>
@Html.ValidationSummary()
    <input type="submit" value="Save" />
} 
</div>
نظرات مطالب
مباحث تکمیلی مدل‌های خود ارجاع دهنده در EF Code first
نیازی نیست زیاد پیچیده فکر کنید. یک لیست ساده رو واکشی کنید (مثلا یک کامنت که سه زیر مجموعه مرتبط دارد با یک select ساده)، اتصال نهایی آن‌ها در سمت کلاینت خودکار است. به عبارتی شکل دهی تو در تو در اینجا در سمت کلاینت انجام می‌شود و نه سمت سرور. سمت سرور آن، یک select معمولی از رکوردهای مورد نظر بیشتر نیست.
var specifiedCommentId = 4; //عدد 4 در اینجا شماره رکورد کامنتی است که دارای یک سری زیر کامنت است
var list = ctx.BlogComments
                 .Include(x => x.Reply)
                 .Where(x => x.Id >= specifiedCommentId && (x.ReplyId == x.Reply.Id || x.Reply == null))
                 .ToList() // fills the childs list too
                 .Where(x => x.Reply == null) // for TreeViewHelper                        
                 .ToList();