پروژه ASP.Net Core MVC (وب و سی شارپ)
افزودن به سبد خرید قسمت اول
این کد مربوط به یک کلاس به نام CookiesManeger است که در namespace EndPoint.Site.Utilities قرار دارد. این کلاس شامل متدهایی برای مدیریت کوکیها در ASP.NET Core است. بیایید هر متد را به صورت جداگانه توضیح دهیم.
کلاس CookiesManeger
متد Add
این متد برای افزودن یک کوکی جدید به پاسخ HTTP استفاده میشود.
csharp
public void Add(HttpContext context, string token, string value)
{
context.Response.Cookies.Append(token, value, getCookieOptions(context));
}
پارامترها:
HttpContext context:
زمینه درخواست HTTP.
string token: نام کوکی.
string value: مقدار کوکی.
عملکرد:
کوکیای با نام token و مقدار value به پاسخ HTTP اضافه میکند. تنظیمات کوکی از متد getCookieOptions گرفته میشود.
متد Contains
این متد بررسی میکند که آیا کوکی با نام مشخصی در درخواست HTTP وجود دارد یا خیر.
csharp
public bool Contains(HttpContext context, string token)
{
return context.Request.Cookies.ContainsKey(token);
}
پارامترها:
HttpContext context:
زمینه درخواست HTTP.
string token: نام کوکی.
عملکرد:
بررسی میکند که آیا کوکی با نام token در درخواست HTTP وجود دارد یا خیر و نتیجه را به صورت بولی برمیگرداند.
متد GetValue
این متد مقدار کوکی با نام مشخص را از درخواست HTTP برمیگرداند.
csharp
public string GetValue(HttpContext context, string token)
{
string cookieValue;
if (!context.Request.Cookies.TryGetValue(token, out cookieValue))
{
return null;
}
return cookieValue;
}
پارامترها:
HttpContext context: زمینه درخواست HTTP.
string token: نام کوکی.
عملکرد:
تلاش میکند مقدار کوکی با نام token را از درخواست HTTP دریافت کند. اگر کوکی موجود باشد، مقدار آن را برمیگرداند؛ در غیر این صورت، null برمیگرداند.
متد Remove
این متد کوکی با نام مشخص را از درخواست HTTP حذف میکند.
csharp
public void Remove(HttpContext context, string token)
{
if (context.Request.Cookies.ContainsKey(token))
{
context.Response.Cookies.Delete(token);
}
}
پارامترها:
HttpContext context:
زمینه درخواست HTTP.
string token: نام کوکی.
عملکرد:
بررسی میکند که آیا کوکی با نام token در درخواست HTTP وجود دارد یا خیر. اگر کوکی موجود باشد، آن را حذف میکند.
متد GetBrowserId
این متد شناسه مرورگر (BrowserId) را دریافت میکند. اگر شناسه مرورگر وجود نداشته باشد، یک شناسه جدید ایجاد کرده و آن را به کوکی اضافه میکند.
csharp
public Guid GetBrowserId(HttpContext context)
{
string browserId = GetValue(context, "BowserId");
if (browserId == null)
{
string value = Guid.NewGuid().ToString();
Add(context, "BowserId", value);
browserId = value;
}
Guid guidBowser;
Guid.TryParse(browserId, out guidBowser);
return guidBowser;
}
پارامترها:
HttpContext context:
زمینه درخواست HTTP.
عملکرد:
تلاش میکند مقدار کوکی BowserId را دریافت کند. اگر کوکی موجود نباشد، یک شناسه جدید ایجاد کرده و آن را به کوکی اضافه میکند. سپس شناسه مرورگر را به صورت Guid برمیگرداند.
متد getCookieOptions
این متد تنظیمات کوکی را برای افزودن به پاسخ HTTP ایجاد میکند.
csharp
private CookieOptions getCookieOptions(HttpContext context)
{
return new CookieOptions
{
HttpOnly = true,
Path = context.Request.PathBase.HasValue ? context.Request.PathBase.ToString() : "/",
Secure = context.Request.IsHttps,
Expires = DateTime.Now.AddDays(100),
};
}
پارامترها:
HttpContext context:
زمینه درخواست HTTP.
عملکرد:
یک شیء CookieOptions جدید ایجاد میکند با تنظیمات زیر:
HttpOnly:
فقط از طریق HTTP قابل دسترسی باشد، نه از طریق جاوااسکریپت.
Path: مسیر کوکی.
Secure:
کوکی فقط در درخواستهای HTTPS ارسال شود.
Expires:
تاریخ انقضای کوکی (100 روز از تاریخ فعلی).
نتیجهگیری
این کلاس ابزاری را فراهم میکند برای مدیریت کوکیها در ASP.NET Core، از جمله افزودن، حذف، بررسی وجود، و دریافت مقدار کوکیها. این ابزار به شما امکان میدهد که به راحتی کوکیها را در برنامه وب خود مدیریت کنید.
پروژه ASP.Net Core MVC (وب و سی شارپ)
افزودن به سبد خرید قسمت اول
بیایید این کد را تحلیل کنیم و توضیحات مربوط به هر بخش از کنترلر CartController را مرور کنیم. این کنترلر به عنوان یک رابط برای مدیریت سبد خرید در برنامه ASP.NET Core عمل میکند و شامل عملیاتی مانند افزودن محصول به سبد خرید، حذف محصول، افزایش و کاهش تعداد محصول و مشاهده سبد خرید کاربر است.
فضای نامها و وابستگیها
csharp
using EndPoint.Site.Utilities;
using Microsoft.AspNetCore.Mvc;
using Test_Store.Application.Services.Carts;
EndPoint.Site.Utilities:
برای استفاده از کلاس CookiesManeger.
Microsoft.AspNetCore.Mvc:
برای استفاده از کنترلرها و متدهای مربوط به MVC.
Test_Store.Application.Services.Carts:
برای استفاده از سرویسهای مربوط به سبد خرید.
تعریف کلاس CartController
csharp
namespace EndPoint.Site.Controllers
{
public class CartController : Controller
{
private readonly ICartService _cartService;
private readonly CookiesManeger cookiesManeger;
public CartController(ICartService cartService)
{
_cartService = cartService;
cookiesManeger = new CookiesManeger();
}
متغیرهای خصوصی:
_cartService:
یک سرویس برای مدیریت عملیاتهای سبد خرید.
cookiesManeger:
یک شیء از کلاس CookiesManeger برای مدیریت کوکیها.
سازنده:
سازنده کلاس، ICartService را به عنوان وابستگی دریافت کرده و آن را به _cartService اختصاص میدهد. همچنین یک نمونه از CookiesManeger ایجاد میکند.
متد Index
csharp
public IActionResult Index()
{
var resultGetLst = _cartService.GetMyCart(cookiesManeger.GetBrowserId(HttpContext));
return View(resultGetLst.Data);
}
عملکرد:
شناسه مرورگر (BrowserId) کاربر را از کوکیها دریافت میکند.
با استفاده از سرویس _cartService، سبد خرید کاربر را دریافت میکند.
دادههای سبد خرید را به ویو ارسال میکند.
متد AddToCart
csharp
public IActionResult AddToCart(long ProductId)
{
var resultAdd = _cartService.AddToCart(ProductId, cookiesManeger.GetBrowserId(HttpContext));
return RedirectToAction("Index");
}
عملکرد:
شناسه مرورگر (BrowserId) کاربر را از کوکیها دریافت میکند.
محصول مورد نظر را به سبد خرید کاربر اضافه میکند.
کاربر را به صفحه Index ریدایرکت میکند.
متد Add
csharp
public IActionResult Add(long CartItemId)
{
_cartService.Add(CartItemId);
return RedirectToAction("Index");
}
عملکرد:
تعداد آیتم مشخص در سبد خرید را افزایش میدهد.
کاربر را به صفحه Index ریدایرکت میکند.
متد LowOff
csharp
public IActionResult LowOff(long CartItemId)
{
_cartService.LowOff(CartItemId);
return RedirectToAction("Index");
}
عملکرد:
تعداد آیتم مشخص در سبد خرید را کاهش میدهد.
کاربر را به صفحه Index ریدایرکت میکند.
متد Remove
csharp
public IActionResult Remove(long ProductId)
{
_cartService.RemoveFromCart(ProductId, cookiesManeger.GetBrowserId(HttpContext));
return RedirectToAction("Index");
}
عملکرد:
شناسه مرورگر (BrowserId) کاربر را از کوکیها دریافت میکند.
محصول مشخص را از سبد خرید کاربر حذف میکند.
کاربر را به صفحه Index ریدایرکت میکند.
نتیجهگیری
این کنترلر به عنوان واسطی برای مدیریت عملیاتهای مختلف مرتبط با سبد خرید در برنامه ASP.NET Core عمل میکند. از سرویسهای سبد خرید (ICartService) و مدیریت کوکیها (CookiesManeger) برای انجام عملیاتها و پیگیری سبد خرید کاربر استفاده میکند.
پروژه ASP.Net Core MVC (وب و سی شارپ)
افزودن به سبد خرید قسمت اول
بیایید کد مربوط به نمایش سبد خرید در ویو را بررسی و توضیح دهیم. این کد یک ویو Razor است که از مدل CartDto برای نمایش سبد خرید کاربر استفاده میکند.
تعریف مدل و تنظیمات
csharp
@using Test_Store.Application.Services.Carts;
@model CartDto
@{
ViewData["Title"] = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
int sumTota = 0;
}
@using Test_Store.Application.Services.Carts:
استفاده از فضای نام برای دسترسی به مدلها و سرویسهای مربوط به سبد خرید.
@model CartDto:
تعریف مدل ویو که از نوع CartDto است.
ViewData["Title"]:
تنظیم عنوان صفحه.
Layout:
تعیین لایوت (چیدمان) صفحه.
int sumTota:
تعریف یک متغیر محلی برای مجموع کل قیمتها.
نمایش سبد خرید
html
<section class="cart-home">
<div class="post-item-cart d-block order-2">
<div class="content-page">
<div class="cart-form">
<form action="#" class="c-form">
<table class="table-cart cart table table-borderless">
<thead>
<tr>
<th scope="col" class="product-cart-name">نام محصول</th>
<th scope="col" class="product-cart-quantity">تعداد مورد نیاز</th>
<th scope="col" class="product-cart-price">قیمت</th>
<th scope="col" class="product-cart-Total">مجموع</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model.CartItems)
{
<tr>
<th scope="row" class="product-cart-name">
<div class="product-thumbnail-img">
<a href="#">
<img src="~/@item.Images">
</a>
<div class="product-remove">
<a href="~/cart/remove?ProductId=@item.Id" class="remove">
<i class="mdi mdi-close"></i>
</a>
</div>
</div>
<div class="product-title">
<a href="#">
@item.Product
</a>
</div>
</th>
<td class="product-cart-quantity">
<div class="required-number before">
<div class="quantity">
<input type="number" min="1" max="100" step="1" value="@item.Count" id="count-@item.Id">
<div class="quantity-nav">
<div class="quantity-button quantity-up" onclick="AddCount('@item.Id')">+</div>
<div class="quantity-button quantity-down" onclick="lowCount('@item.Id')">-</div>
</div>
</div>
</div>
</td>
<td class="product-cart-price">
<span class="amount">
@item.Price.ToString("n0")
<span>تومان</span>
</span>
</td>
<td class="product-cart-Total">
<span class="amount">
@{
پروژه ASP.Net Core MVC (وب و سی شارپ)
افزودن به سبد خرید قسمت اول
int total = item.Price * item.Count;
}
@total.ToString("n0")
<span>تومان</span>
</span>
</td>
</tr>
}
</tbody>
</table>
</form>
</div>
جدول سبد خرید: شامل ستونهایی برای نام محصول، تعداد مورد نیاز، قیمت و مجموع است.
@foreach:
حلقهای برای تکرار آیتمهای موجود در سبد خرید و نمایش آنها.
مجموع قیمت هر آیتم: محاسبه مجموع قیمت هر آیتم با ضرب قیمت واحد در تعداد و نمایش آن.
نمایش جمع کل سبد خرید و گزینههای حمل و نقل
html
<div class="cart-collaterals">
<div class="totals d-block">
<h3 class="Total-cart-total">مجموع کل سبد خرید</h3>
<div class="checkout-summary">
<ul class="checkout-summary-summary">
<li class="cart-subtotal">
<span class="amount">قیمت کل</span>
<span> @sumTota.ToString("n0") تومان</span>
</li>
<li class="shipping-totals">
<span class="amount">حمل و نقل</span>
<div class="shipping-totals-item">
<div class="shipping-totals-outline">
<label for="#" class="outline-radio">
<input type="radio" name="payment_method" id="payment-option-online" checked="checked">
<span class="outline-radio-check"></span>
</label>
<label for="#" class="shipping-totals-title-row">
<div class="shipping-totals-title">حمل و نقل رایگان</div>
</label>
</div>
<div class="shipping-totals-outline">
<label for="#" class="outline-radio">
<input type="radio" name="payment_method" id="payment-option-online">
<span class="outline-radio-check"></span>
</label>
<label for="#" class="shipping-totals-title-row">
<div class="shipping-totals-title">حمل و نقل معمولی: 20,000 تومان</div>
</label>
</div>
<span class="shipping-destination">حمل و نقل به خراسان شمالی</span>
</div>
</li>
<li class="order-total">
<span class="amount"> مجموع</span>
<span> 6,032,000 تومان</span>
</li>
<li class="discount-code">
<div class=" align-items-center">
<div class="col-md-7 pr mt-5">
<div class="coupon">
<form action="#">
<input type="text" name="input-coupon" class="input-coupon-code" placeholder="كد تخفیف:">
<button class="btn btn-coupon" type="submit">اعمال</button>
</form>
</div>
</div>
پروژه ASP.Net Core MVC (وب و سی شارپ)
افزودن به سبد خرید قسمت اول
<div class="col-md-2 pl mt-5">
<div class="proceed-to-checkout">
<a href="#" class="checkout-button d-block">تسویه حساب</a>
</div>
</div>
</div>
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</section>
مجموع کل سبد خرید: شامل بخشهایی برای نمایش قیمت کل، هزینه حمل و نقل و مجموع نهایی.
گزینههای حمل و نقل: شامل گزینههای حمل و نقل رایگان و حمل و نقل معمولی است.
کد تخفیف: یک فرم برای وارد کردن کد تخفیف و اعمال آن.
دکمه تسویه حساب: دکمهای برای انتقال به صفحه تسویه حساب.
اسکریپتها
csharp
@section Scripts
{
<script>
function AddCount(CartItemId) {
window.location.replace('/cart/add?CartItemId=' + CartItemId);
}
function lowCount(CartItemId) {
window.location.replace('/cart/LowOff?CartItemId=' + CartItemId);
}
</script>
}
افزایش تعداد آیتم: فراخوانی متد AddCount با استفاده از شناسه آیتم.
کاهش تعداد آیتم: فراخوانی متد lowCount با استفاده از شناسه آیتم.
نتیجهگیری
این ویو Razor یک صفحه کامل برای نمایش و مدیریت سبد خرید کاربر است. شامل نمایش آیتمهای موجود در سبد خرید، محاسبه مجموع قیمتها، نمایش گزینههای حمل و نقل، اعمال کد تخفیف و امکان تسویه حساب است.
Cookie management.zip
حجم:
2.5M
پروژه کوچک مدیریت کوکی که فقط در همین پروژه کوکی ساخته میشود و حذف کرد
Test_Store 16.zip
حجم:
57M
افزودن به سبد قسمت دوم
من را ببخشید نتوانستم از صفحه تست زرین پال ارتباط برقرار کنم بعدا من بیشتر برسی کنم که مشکل کجاست و اینکه من تا بعد عید نمیتوانم آموزش بگذارم شاید در عید اگر وقت کردم آموزش میگذارم
تا بعد عید از صبر شکیبایی متشکرم
من کد ها را توضیح نمیدهم چون نتوانستم ارتباط با صفحه تست زرین پال برقرار کنم، خودتان کدها را برسی کنید و اگر مشکل را حل کردید در ایتا به من پیام دهید چند تا جدول هم اضافه شده که مایگریشن جدید و آپدیت دیتابیس
لینک سایت و نمونه کدها:
https://www.zarinpal.com/lab/category/samplecode/
اگر لینک باز نشد، لینک را کپی و در مرورگر پیس کن تا لینک باز شود
zarinpalasp.netcorerest.zip
حجم:
9.6M
سلام پروژه تصحح شده زرین پال هست که به صفحه تست بانک زرین وصل می شود
نکته مهم : برنامه فقط یک بار اجرا می شود و نمیتونید به صفحه قبل برگردید و دوباره تست کنید.
شما پس از انصراف یا پرداخت موفق به صفحه پرداخت برگشتهاید و به دلیل مسائل امنیتی، سشن (session) پرداخت قبلی به پایان رسیده و دیگر نمیتوان از آن استفاده کرد. این یک مکانیزم امنیتی استاندارد است تا از پرداختهای تکراری یا مشکلات مرتبط با سشنهای نامعتبر جلوگیری شود.
پروژه ASP.Net Core MVC (وب و سی شارپ)
سلام پروژه تصحح شده زرین پال هست که به صفحه تست بانک زرین وصل می شود نکته مهم : برنامه فقط یک بار ا
بیایید این کد را قدم به قدم توضیح دهیم.
شرح کد:
این کد یک کلاس به نام RequestParameters در فضای نام zarinpalasp.netcorerest.Models ایجاد میکند. این کلاس برای نگهداری پارامترهای مربوط به درخواست پرداخت از زرینپال استفاده میشود.
جزئیات کد:
فضای نام و استفادهها:
csharp
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
این خطوط از کد، فضاهای نام مورد نیاز برای عملکرد برنامه را وارد میکنند.
تعریف کلاس:
csharp
namespace zarinpalasp.netcorerest.Models
{
public class RequestParameters
{
کلاس RequestParameters در فضای نام zarinpalasp.netcorerest.Models تعریف شده است.
خصوصیات کلاس:
csharp
public string merchant_id { get; set; }
public string amount { get; set; }
public string description { get; set; }
public string callback_url { get; set; }
public string[]? metadata { get; set; }
این خصوصیات پارامترهای مختلف مربوط به درخواست پرداخت را تعریف میکنند:
merchant_id: شناسه تاجر.
amount: مقدار پرداخت.
description: توضیح درباره پرداخت.
callback_url: URL
بازگشتی برای تأیید یا لغو پرداخت.
metadata:
اطلاعات اضافهای که میتواند شامل موبایل و ایمیل باشد.
سازنده کلاس:
csharp
public RequestParameters(string merchant_id, string amount, string description, string callback_url, string? mobile, string? email)
{
this.merchant_id = merchant_id;
this.amount = amount;
this.description = description;
this.callback_url = callback_url;
this.metadata = new string[2];
if (mobile != null)
{
this.metadata[0] = mobile;
}
if (email != null)
{
this.metadata[1] = email;
}
}
سازنده کلاس RequestParameters پارامترهای ورودی را میپذیرد و آنها را به خصوصیات کلاس اختصاص میدهد. همچنین، آرایه metadata را مقداردهی اولیه میکند و در صورت وجود مقادیر موبایل و ایمیل، آنها را به آرایه metadata اضافه میکند.
تبدیل ضمنی:
csharp
public static implicit operator RestSharp.RequestParameters(RequestParameters v)
{
throw new NotImplementedException();
}
این خط از کد یک تبدیل ضمنی (implicit) از RequestParameters به RestSharp.RequestParameters تعریف میکند. اما چون پیادهسازی نشده، یک استثنای NotImplementedException پرتاب میکند.
نتیجهگیری
کلاس RequestParameters برای نگهداری پارامترهای مربوط به درخواست پرداخت از زرینپال استفاده میشود. این کلاس شامل پارامترهای مهمی مانند merchant_id, amount, description, callback_url, و metadata (که میتواند موبایل و ایمیل باشد) است.
پروژه ASP.Net Core MVC (وب و سی شارپ)
سلام پروژه تصحح شده زرین پال هست که به صفحه تست بانک زرین وصل می شود نکته مهم : برنامه فقط یک بار ا
شرح کد:
این کد یک کلاس به نام URLs در فضای نام zarinpalasp.netcorerest.Models ایجاد میکند. این کلاس شامل آدرسهای URL ثابت (constant) است که برای ارتباط با زرینپال در حالت sandbox استفاده میشود.
جزئیات کد:
فضای نام و استفادهها:
csharp
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
این خطوط از کد، فضاهای نام مورد نیاز برای عملکرد برنامه را وارد میکنند. در این مورد، فضای نامهای استانداردی مانند System, System.Collections.Generic, System.Linq, و System.Threading.Tasks وارد شدهاند.
تعریف کلاس:
csharp
namespace zarinpalasp.netcorerest.Models
{
public class URLs
{
کلاس URLs در فضای نام zarinpalasp.netcorerest.Models تعریف شده است. این کلاس به عنوان یک محتوای ثابت برای نگهداری URLهای مربوط به زرینپال استفاده میشود.
تعریف آدرسهای URL ثابت:
csharp
public const String gateWayUrl = "https://sandbox.zarinpal.com/pg/StartPay/";
public const String requestUrl = "https://sandbox.zarinpal.com/pg/v4/payment/request.json";
public const String verifyUrl = "https://sandbox.zarinpal.com/pg/v4/payment/verify.json";
این خطوط از کد سه آدرس URL ثابت (constant) را تعریف میکنند:
gateWayUrl:
آدرس URL که برای شروع فرآیند پرداخت استفاده میشود.
requestUrl:
آدرس URL که برای ارسال درخواست پرداخت به زرینپال استفاده میشود.
verifyUrl:
آدرس URL که برای تأیید پرداخت استفاده میشود.
نتیجهگیری
کلاس URLs شامل آدرسهای URL ثابت است که برای ارتباط با زرینپال در حالت sandbox استفاده میشود. این آدرسها شامل آدرسهایی برای شروع پرداخت، ارسال درخواست پرداخت، و تأیید پرداخت میباشند.
این ساختار کد به شما امکان میدهد تا به راحتی از این URLها در سایر بخشهای برنامه خود استفاده کنید و در صورت تغییر آدرسها، تنها کافی است این ثابتها را در یک مکان تغییر دهید.