Our API is 100% open for all developers who wish to create Telegram applications on our platform
Feel free to study the open source code of existing Telegram applications for examples of how things work here
سپس وارد مرحله Preview Data Source Result میشوید که در آن قادر خواهید بود پیش نمایشی از داده هایی که بعدا توسط Query ساخته شده بارگذاری خواهند شد را مشاهده نمایید. Next را کلیک نموده تا وارد مرحله بعد شوید.مرحله بعد Standard Report Type میباشد که در این مرحله شما میتوانید نوع گزارش خود را انتخاب نمایید و کلید Next را فشار دهید.در بخش Design Data Layout چند فیلد را از بخش سمت چپ (Available Fields) انتخاب نموده و کلید Details را کلیک نمایید.فیلدهای انتخاب شده به بخش Details گزارش اضافه خواهند شد.در ادامه Next را کلیک کنید تا وارد بخش Choose Report Layout شوید.شما میتوانید در این بخش یک حالت نمایشی را برای گزارش خود انتخاب نمایید و Next را کلیک نمایید.در بخش Choose Report Style یک قالب بندی جهت گزارش خود انتخاب نمایید.در ادامه Next و سپس Finish را کلیک نمایید.کدهای گزارش Generate شده میتوان در قسمت Designer گزارش را مشاهده نمود.
در این حالت کارهای زیر توسط Wizard به صورت اتوماتیک انجام خواهد شد:
• بایند شدن اتوماتیک فیلدهای گزارش به ستوانهای مرتبط
• اعمال قالب بندی انتخاب شده برای صفحه و سر ستونها
• افزودن تاریخ و شماره صفحه به پایین گزارش
در ادامه پروژه را Rebuild کرده و گزینه Preview را در Designer جهت نمایش ، پیش نمایش گزارش کلیک نمایید.
using System.Threading.Tasks; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; namespace AngularTemplateDrivenFormsLab.Utils { public class ContentSecurityPolicyMiddleware { private readonly RequestDelegate _next; public ContentSecurityPolicyMiddleware(RequestDelegate next) { _next = next; } public Task Invoke(HttpContext context) { context.Response.Headers.Add("X-Frame-Options", "SAMEORIGIN"); context.Response.Headers.Add("X-Xss-Protection", "1; mode=block"); context.Response.Headers.Add("X-Content-Type-Options", "nosniff"); string[] csp = { "default-src 'self'", "style-src 'self' 'unsafe-inline'", "script-src 'self' 'unsafe-inline' 'unsafe-eval'", "font-src 'self'", "img-src 'self' data:", "connect-src 'self'", "media-src 'self'", "object-src 'self'", "report-uri /api/CspReport/Log" //TODO: Add api/CspReport/Log }; context.Response.Headers.Add("Content-Security-Policy", string.Join("; ", csp)); return _next(context); } } public static class ContentSecurityPolicyMiddlewareExtensions { /// <summary> /// Make sure you add this code BEFORE app.UseStaticFiles();, /// otherwise the headers will not be applied to your static files. /// </summary> public static IApplicationBuilder UseContentSecurityPolicy(this IApplicationBuilder builder) { return builder.UseMiddleware<ContentSecurityPolicyMiddleware>(); } } }
public void Configure(IApplicationBuilder app) { app.UseContentSecurityPolicy();
context.Response.Headers.Add("X-Frame-Options", "SAMEORIGIN");
context.Response.Headers.Add("X-Xss-Protection", "1; mode=block");
context.Response.Headers.Add("X-Content-Type-Options", "nosniff");
string[] csp = { "default-src 'self'", "style-src 'self' 'unsafe-inline'", "script-src 'self' 'unsafe-inline' 'unsafe-eval'", "font-src 'self'", "img-src 'self' data:", "connect-src 'self'", "media-src 'self'", "object-src 'self'", "report-uri /api/CspReport/Log" //TODO: Add api/CspReport/Log }; context.Response.Headers.Add("Content-Security-Policy", string.Join("; ", csp));
Set-Cookie: sess=abc123; path=/; SameSite
<?xml version="1.0" encoding="utf-8"?> <configuration> <system.webServer> <rewrite> <outboundRules> <clear /> <!-- https://scotthelme.co.uk/csrf-is-dead/ --> <rule name="Add SameSite" preCondition="No SameSite"> <match serverVariable="RESPONSE_Set_Cookie" pattern=".*" negate="false" /> <action type="Rewrite" value="{R:0}; SameSite=lax" /> <conditions></conditions> </rule> <preConditions> <preCondition name="No SameSite"> <add input="{RESPONSE_Set_Cookie}" pattern="." /> <add input="{RESPONSE_Set_Cookie}" pattern="; SameSite=lax" negate="true" /> </preCondition> </preConditions> </outboundRules> </rewrite> </system.webServer> </configuration>
"report-uri /api/CspReport/Log" //TODO: Add api/CspReport/Log
{ "csp-report": { "document-uri": "http://localhost:5000/untypedSha", "referrer": "", "violated-directive": "script-src", "effective-directive": "script-src", "original-policy": "default-src 'self'; style-src 'self'; script-src 'self'; font-src 'self'; img-src 'self' data:; connect-src 'self'; media-src 'self'; object-src 'self'; report-uri /api/Home/CspReport", "disposition": "enforce", "blocked-uri": "eval", "line-number": 21, "column-number": 8, "source-file": "http://localhost:5000/scripts.bundle.js", "status-code": 200, "script-sample": "" } }
class CspPost { [JsonProperty("csp-report")] public CspReport CspReport { get; set; } } class CspReport { [JsonProperty("document-uri")] public string DocumentUri { get; set; } [JsonProperty("referrer")] public string Referrer { get; set; } [JsonProperty("violated-directive")] public string ViolatedDirective { get; set; } [JsonProperty("effective-directive")] public string EffectiveDirective { get; set; } [JsonProperty("original-policy")] public string OriginalPolicy { get; set; } [JsonProperty("disposition")] public string Disposition { get; set; } [JsonProperty("blocked-uri")] public string BlockedUri { get; set; } [JsonProperty("line-number")] public int LineNumber { get; set; } [JsonProperty("column-number")] public int ColumnNumber { get; set; } [JsonProperty("source-file")] public string SourceFile { get; set; } [JsonProperty("status-code")] public string StatusCode { get; set; } [JsonProperty("script-sample")] public string ScriptSample { get; set; } }
namespace AngularTemplateDrivenFormsLab.Controllers { [Route("api/[controller]")] public class CspReportController : Controller { [HttpPost("[action]")] [IgnoreAntiforgeryToken] public async Task<IActionResult> Log() { CspPost cspPost; using (var bodyReader = new StreamReader(this.HttpContext.Request.Body)) { var body = await bodyReader.ReadToEndAsync().ConfigureAwait(false); this.HttpContext.Request.Body = new MemoryStream(Encoding.UTF8.GetBytes(body)); cspPost = JsonConvert.DeserializeObject<CspPost>(body); } //TODO: log cspPost return Ok(); } } }
وب اسمبلی چیست؟
<BlazorMode> ... </BlazorMode> <WebAppDeploymentType> ... </WebAppDeploymentType>
AutoMapper has been a popular library in the .NET open source community for a long time. As their site says:
AutoMapper is a simple little library built to solve a deceptively complex problem - getting rid of code that mapped one object to another. This type of code is rather dreary and boring to write, so why not invent a tool to do it for us?