شرکت HP هم به همین ترتیب
ASP.NET Web API - قسمت اول
NuGet مربوط به Web API OData مرتبا به روز میشه. آخرین به روز رسانی آن مربوط به 5 روز قبل بوده.
ضمن اینکه خروجی OData استاندارد است. بنابراین با کلاینتهای موجود کار میکنه. فرقی نمیکنه تولید کننده چی هست تا زمانیکه استاندارد رعایت بشه.
شروع به کار با Visual Studio 2017
Ready to get started with Visual Studio 2017? This is your course! Join the experts and get the details, from installation to debugging, in this practical Visual Studio 2017 deep dive.
See how to download and install Visual Studio in standalone and networked environments, along with some of the configuration options, such as choosing your workloads (types of apps or services, languages, and platforms), customizing the installation, and installing language packs. Then, take a tour of the Visual Studio IDE, including all the basics you need to get started with your development projects. Finally, explore debugging in Visual Studio, and learn how to use its features to investigate problems in your code.
@Html.ActionLink("text", "Index", "Home")
@Html.ActionLink("text", result: MVC.Home.Index())
پروژهی T4MVC توسط یکی از اعضای تیم ASP.NET تهیه شدهاست. همچنین مدتی است مایکروسافت پروژهی دیگری را نیز به نام Microsoft.AspNet.Mvc.Futures در حال تهیه و آزمایش دارد که از آن نیز میتوان برای تولید لینکهای Strongly typed استفاده کرد.
نصب کتابخانهی Microsoft ASP.NET MVC Futures
برای نصب کتابخانهی آیندهی ASP.NET MVC، تنها کافی است دستور ذیل را در کنسول پاورشل نیوگت صادر کنید:
PM> Install-Package Microsoft.AspNet.Mvc.Futures
نحوهی تعریف مسیرهای Strongly typed، توسط کتابخانهی آیندهی ASP.NET MVC
پس از نصب بستهی Microsoft.AspNet.Mvc.Futures، جهت سهولت کار نیاز است اسمبلی آنرا که Microsoft.Web.Mvc.dll نام دارد، به تمام صفحات سایت معرفی کنیم. برای این منظور فایل web.config پوشهی views را گشوده و یک سطر تعریف فضای نام Microsoft.Web.Mvc را به آن اضافه کنید:
<system.web.webPages.razor> <host /> <pages pageBaseType="System.Web.Mvc.WebViewPage"> <namespaces> <!-- سایر تعاریف --> <add namespace="Microsoft.Web.Mvc"/> <!-- این سطر اضافه شود --> </namespaces> </pages> </system.web.webPages.razor>
یک نکتهی مهم
این بسته در حال حاضر هرچند دارای پوشهی دات نت 4 است، اما عملا برای دات نت 4.5 یا به عبارتی ASP.NET MVC 5 کامپایل شدهاست و در ASP.NET MVC 4 قابل استفاده نیست:
The primary reference "Microsoft.Web.Mvc" could not be resolved because it was built against the ".NETFramework,Version=v4.5" framework. This is a higher version than the currently targeted framework ".NETFramework,Version=v4.0"
ActionLinkهای جدید بستهی Microsoft.AspNet.Mvc.Futures
به این ترتیب برای مثال در مورد ActionLink، دو overload جدید را میتوان در Viewها استفاده کرد:
public static System.Web.Mvc.MvcHtmlString ActionLink<TController>(this System.Web.Mvc.HtmlHelper helper, System.Linq.Expressions.Expression<Action<TController>> action, string linkText) public static System.Web.Mvc.MvcHtmlString ActionLink<TController>(this System.Web.Mvc.HtmlHelper helper, System.Linq.Expressions.Expression<Action<TController>> action, string linkText, object htmlAttributes)
@(Html.ActionLink<HomeController>(action => action.Index(id: 1), "Test"))
همچنین اگر اکشن متد Index کنترلر HomeController دارای پارامتر نیز باشد، در همینجا قابل مقدار دهی است.
RenderAction و BeginFormهای جدید بستهی Microsoft.AspNet.Mvc.Futures
از این نوع متدهای الحاقی Expression Action دار، برای RenderAction و BeginForm نیز طراحی شدهاند:
public static void RenderAction<TController>(this System.Web.Mvc.HtmlHelper helper, System.Linq.Expressions.Expression<Action<TController>> action) public static System.Web.Mvc.Html.MvcForm BeginForm<TController>(this System.Web.Mvc.HtmlHelper helper, System.Linq.Expressions.Expression<Action<TController>> action, System.Web.Mvc.FormMethod method, System.Collections.Generic.IDictionary<string,object> htmlAttributes)
@{ Html.RenderAction<HomeController>(action => action.Index(id: 1)); }
@using (Html.BeginForm<HomeController>(action => action.Index(null))) { }
RedirectToAction جدید بستهی Microsoft.AspNet.Mvc.Futures
به همراه دو متد کمکی Expression Action دار، جهت استفاده در متدهای کنترلرهای سایت؛ برای ساخت Url و همچنین redirect به یک اکشن متد دیگر:
public static string BuildUrlFromExpression<TController>(System.Web.Routing.RequestContext context, System.Web.Routing.RouteCollection routeCollection, System.Linq.Expressions.Expression<Action<TController>> action) public static System.Web.Mvc.RedirectToRouteResult RedirectToAction<TController>(this System.Web.Mvc.Controller controller, System.Linq.Expressions.Expression<Action<TController>> action)
using System.Web.Mvc; using Microsoft.Web.Mvc; namespace MVC5Basic.Controllers { public class HomeController : Controller { public ActionResult Index() { var link = LinkBuilder.BuildUrlFromExpression<HomeController>( this.Request.RequestContext, null, action => action.About()); this.RedirectToAction<HomeController>(action => action.About()); return View(); } public ActionResult About() { ViewBag.Message = "Your application description page."; return View(); } } }
کدامیک بهتر است؟ T4MVC یا ASP.NET MVC Futures ؟
T4MVC موارد بیشتری را پوشش میدهد؛ حتی مسیرهای تصاویر ثابت و فایلهای js را نیز میتوان توسط آن تعریف کرد. فقط نگهداری آن هر بار نیاز به اجرای فایل t4 مرتبط با آن دارد و در اینجا کار با ASP.NET MVC Futures سادهتر است.
برای مطالعه بیشتر
بررسی که در اینجا صورت گرفت صرفا در مورد امکانات تولید مسیرهای strongly typed این کتابخانه است. سایر امکانات آنرا در مطلب ذیل میتوانید پیگیری کنید:
Using the Features of ASP.NET MVC 3 Futures
dotnet add package linq2db.EntityFrameworkCore
LinqToDB.EntityFrameworkCore.LinqToDBForEFTools.Initialize(); LinqToDB.Data.DataConnection.TurnTraceSwitchOn();
var runningTotalCountForEachYear = context.Bookings .Select(booking => new { booking.StartTime.Year, RunningTotalCount = Sql.Ext.Count(booking.StartTime) .Over() .OrderBy(booking.StartTime.Year) .ToValue() }) .OrderBy(result => result.Year) .Distinct() .ToLinqToDB() .ToList();
SELECT DISTINCT DatePart(year, [booking].[StartTime]), COUNT([booking].[StartTime]) OVER(ORDER BY DatePart(year, [booking].[StartTime])) FROM [Bookings] [booking] ORDER BY DatePart(year, [booking].[StartTime])
پالایش درخواست ها در IIS
ابتدا بستهی نیوگت DNTCommon.Web.Core را نصب کنید:
PM> Install-Package DNTCommon.Web.Core
الف) آنرا پیش از هر میانافزار دیگری ثبت کنید:
public void Configure(IApplicationBuilder app) { app.UseAntiDos();
ج) این تنظیمات را به صورت زیر به برنامه معرفی کنید:
public void ConfigureServices(IServiceCollection services) { services.Configure<AntiDosConfig>(options => Configuration.GetSection("AntiDosConfig").Bind(options));
طراحی یک ماژول IpBlocker در ASP.NET MVC
ابتدا بستهی نیوگت DNTCommon.Web.Core را نصب کنید:
PM> Install-Package DNTCommon.Web.Core
الف) آنرا پیش از هر میانافزار دیگری ثبت کنید:
public void Configure(IApplicationBuilder app) { app.UseAntiDos();
ج) این تنظیمات را به صورت زیر به برنامه معرفی کنید:
public void ConfigureServices(IServiceCollection services) { services.Configure<AntiDosConfig>(options => Configuration.GetSection("AntiDosConfig").Bind(options));
ابتدا بستهی نیوگت DNTCommon.Web.Core را نصب کنید:
PM> Install-Package DNTCommon.Web.Core
الف) آنرا پیش از هر میانافزار دیگری ثبت کنید:
public void Configure(IApplicationBuilder app) { app.UseAntiDos();
ج) این تنظیمات را به صورت زیر به برنامه معرفی کنید:
public void ConfigureServices(IServiceCollection services) { services.Configure<AntiDosConfig>(options => Configuration.GetSection("AntiDosConfig").Bind(options));
نحوهی بستن یک بازهی IP در IIS
ابتدا بستهی نیوگت DNTCommon.Web.Core را نصب کنید:
PM> Install-Package DNTCommon.Web.Core
الف) آنرا پیش از هر میانافزار دیگری ثبت کنید:
public void Configure(IApplicationBuilder app) { app.UseAntiDos();
ج) این تنظیمات را به صورت زیر به برنامه معرفی کنید:
public void ConfigureServices(IServiceCollection services) { services.Configure<AntiDosConfig>(options => Configuration.GetSection("AntiDosConfig").Bind(options));