国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Heim WeChat-Applet WeChat-Entwicklung .NET C# Beispielanalyse der Verwendung des offiziellen WeChat-Kontos zur Anmeldung auf der Website

.NET C# Beispielanalyse der Verwendung des offiziellen WeChat-Kontos zur Anmeldung auf der Website

Apr 25, 2017 am 09:53 AM
.net c# WeChat Official Account

Dieser Artikel stellt haupts?chlich .NET C# vor, um sich mit dem ?ffentlichen WeChat-Konto auf der Website anzumelden, und zeigt Ihnen, wie Sie das ?ffentliche WeChat-Konto verwenden, um sich auf der Website anzumelden

Anwendbar zu: Dieser Artikel gilt für Benutzer mit einer gewissen Grundlage in der WeChat-Entwicklung

Einführung:
Nachdem ich 300 Yuan ausgegeben hatte, um mich für die ?ffentliche WeChat-Plattform zu bewerben, stellte ich fest, dass ich sie nicht nutzen kann Melden Sie sich mit dem ?ffentlichen WeChat-Konto auf der Website an (nicht auf WeChat ge?ffnet), um die WeChat-Kontonummer zu erhalten. Nach sorgf?ltiger Recherche fand ich heraus, dass ich weitere 300 Yuan ausgeben muss, um mich für die offene WeChat-Plattform zu bewerben und mich auf der Website anzumelden. Da ich ein Verlierer-Programmierer bin, habe ich darüber nachgedacht, selbst eine Anmeldeschnittstelle zu erstellen.

Tools und Umgebung:
1. VS2013 .net4.0 C# MVC4.0 Razor
A .SignalR ; Hintergrunddaten jederzeit abrufen
B.Gma.QrCodeNet.Encoding; QR-Code aus Text generieren

Ziele erreicht
1 Auf Ihrem Computer werden Benutzer aufgefordert, WeChat zum Scannen zu verwenden und sich zur Best?tigung anzumelden.
2. Nachdem der Benutzer über WeChat gescannt und best?tigt hat, erh?lt der Computer automatisch die Best?tigungsnachricht und springt zur Startseite der Website.

Prinzipielle Analyse
1.SignalR ist ein magisches Tool, das Informationen von Browser A an den Server senden kann und der Server die Nachricht automatisch an den angegebenen Browser B weiterleitet. Dann ist mein Plan, die Anmeldeseite mit einem Computerbrowser zu ?ffnen, einen QR-Code zu generieren (der Inhalt ist die URL mit der Benutzerautorisierung der Webseite der ?ffentlichen WeChat-Plattform) und die Code-Scanfunktion von WeChat zu verwenden, um die Website zu ?ffnen. Senden Sie die erhaltene OPENID des WeChat-Benutzers über SignalR an den Computerbrowser, um die Anmeldefunktion zu implementieren

Implementierungsprozess
1. Registrierung und Berechtigungen der ?ffentlichen WeChat-Plattform (überspringen). ..)
2. Erstellen Sie eine neue MVC-Website in VS2013. Die Umgebung, die ich verwende, ist die .NET4.0 C# MVC4.0 Razor-Engine (pers?nliche Gewohnheit).

3. Installieren Sie SignalR

Klicken Sie auf Tools==> Library Package Manager==> Folgender Befehl:

Install-Package Microsoft.AspNet.SignalR -Version 1.1.4


.net4.0 Es wird empfohlen, 1.1.4 hoch in der Mvc4-Umgebung zu installieren Die Version kann nicht installiert werden

SignalR erfolgreich installiert

SignalR einrichten


var config = new Microsoft.AspNet.SignalR.HubConfiguration();

config.EnableCrossDomain = true;

RouteTable.Routes.MapHubs(config);

Erstellen Sie eine neue Klasse PushHub.cs


Erstellen Sie einen neuen MVC-Controller ?LoginController.cs“, Sie werden hierfür keine anderen Tutorials lesen

using Microsoft.AspNet.SignalR;
using Microsoft.AspNet.SignalR.Hubs;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace WD.C.Utility
{
 /// <summary>
 /// 標注Single javascription要連接的名稱
 /// </summary>
 [HubName("pushHub")]
 public class PushHub : Hub
 {
 /// <summary>
 /// 臨時保存請求的用戶
 /// </summary>
 static Dictionary<string, string> rlist = new Dictionary<string, string>();
 
 /// <summary>
 /// 登錄請求的用戶;打開Login頁執(zhí)行本方法,用于記錄瀏覽器連接的ID
 /// </summary>
 public void ruserConnected()
 {
 if (!rlist.ContainsKey(Context.ConnectionId))
 rlist.Add(Context.ConnectionId, string.Empty);

 //Client方式表示對指定ID的瀏覽器發(fā)送GetUserId方法,瀏覽器通過javascrip方法GetUserId(string)得到后臺發(fā)來的Context.ConnectionId
 Clients.Client(Context.ConnectionId).GetUserId(Context.ConnectionId);
 }
 /// <summary>
 /// 實際登錄的用戶
 /// </summary>
 /// <param name="ruser">請求的用戶ID</param>
 /// <param name="logUserID">微信OPENID</param>
 public void logUserConnected(string ruser, string logUserID)
 {
 if (rlist.ContainsKey(ruser))
 {
 rlist.Remove(ruser);

 //Client方式表示對指定ID的瀏覽器發(fā)送GetUserId方法,瀏覽器通過javascrip方法userLoginSuccessful(bool,string)得到后臺發(fā)來的登錄成功,和微信OPENID
 Clients.Client(ruser).userLoginSuccessful(true, logUserID);
 }
 }
 }
}

Controller ?QRController.cs“ wird verwendet, um QR-Codes aus Text zu generieren

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace WD.C.Controllers
{
 public class LoginController : Controller
 {
 //
 // GET: /Login/

 /// <summary>
 /// 登錄主頁,電腦端打開
 /// </summary>
 /// <returns></returns>
 public ActionResult Index()
 {
 /*參考 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842&token=&lang=zh_CN
 *1.URL用于生成二維碼給微信掃描
 *2.格式參考微信公從平臺幫助
 * https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect 若提示“該鏈接無法訪問”,請檢查參數(shù)是否填寫錯誤,是否擁有scope參數(shù)對應的授權作用域權限。 
 *3.REDIRECT_URI內(nèi)容為返回地址,需要開發(fā)者需要先到公眾平臺官網(wǎng)中的“開發(fā) - 接口權限 - 網(wǎng)頁服務 - 網(wǎng)頁帳號 - 網(wǎng)頁授權獲取用戶基本信息”的配置選項中,修改授權回調域名
 *4.REDIRECT_URI應回調到WxLog頁并進行URLEncode編碼,如: redirect_uri=GetURLEncode("http://你的網(wǎng)站/Login/WxLog?ruser="); ruser為PushHub中的Context.ConnectionId到View中配置 
 *
 */
 ViewBag.Url = string.Format("https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&redirect_uri={1}&response_type=code&scope=snsapi_base&state={2}#wechat_redirect", B.Helper.AppID, GetURLEncode("http://你的網(wǎng)站/Login/WxLog?ruser="), Guid.NewGuid());
 return View();
 }

 /// <summary>
 /// 登錄確認頁,微信端打開
 /// </summary>
 /// <param name="ruser"></param>
 /// <returns></returns>
 public ActionResult WxLog(string ruser)
 { 
//使用微信登錄
if (!string.IsNullOrEmpty(code))
 {
 string loguser= B.Helper.GetOpenIDByCode(code);
 Session["LogUserID"] =loguser;
 ViewBag.LogUserID = loguser;
 }

 ViewBag.ruser = ruser;
 return View();
 
 }
 }
}

Ansicht ?ffnet SignalR

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace WD.C.Controllers
{
 public class QRController : Controller
 {
 //
 // GET: /QR/

 public ActionResult Index()
 {
 return View();
 }
 /// <summary>
 /// 獲得2維碼圖片
 /// </summary>
 /// <param name="str"></param>
 /// <returns></returns>
 public ActionResult GetQRCodeImg(string str)
 {
 using (var ms = new System.IO.MemoryStream())
 {

 string stringtest = str;
 GetQRCode(stringtest, ms);
 Response.ContentType = "image/Png";
 Response.OutputStream.Write(ms.GetBuffer(), 0, (int)ms.Length);
 System.Drawing.Bitmap img = new System.Drawing.Bitmap(100, 100);
 img.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
 Response.End();
 return File(ms.ToArray(), @"image/jpeg");
 }
 }
 private static bool GetQRCode(string strContent, System.IO.MemoryStream ms)
 {

 Gma.QrCodeNet.Encoding.ErrorCorrectionLevel Ecl = Gma.QrCodeNet.Encoding.ErrorCorrectionLevel.M; //誤差校正水平 
 string Content = strContent;//待編碼內(nèi)容
 Gma.QrCodeNet.Encoding.Windows.Render.QuietZoneModules QuietZones = Gma.QrCodeNet.Encoding.Windows.Render.QuietZoneModules.Two; //空白區(qū)域 
 int ModuleSize = 12;//大小
 var encoder = new Gma.QrCodeNet.Encoding.QrEncoder(Ecl);
 Gma.QrCodeNet.Encoding.QrCode qr;
 if (encoder.TryEncode(Content, out qr))//對內(nèi)容進行編碼,并保存生成的矩陣
 {
 var render = new Gma.QrCodeNet.Encoding.Windows.Render.GraphicsRenderer(new Gma.QrCodeNet.Encoding.Windows.Render.FixedModuleSize(ModuleSize, QuietZones));
 render.WriteToStream(qr.Matrix, System.Drawing.Imaging.ImageFormat.Png, ms);
 }
 else
 {
 return false;
 }
 return true;
 }
 }
}
var chat = $.connection.pushHub;

$.connection .hub.start().done(function () {
??????chat.server.ruserConnected(); ???});


$.connection. pushHub entspricht

chat.server.ruserConnected(); entspricht

bedeutet, dass ?pushHub“ aufgerufen wird. Führen Sie nach dem Ausführen die Methode ?runserConnected“ aus und fügen Sie die ConnectionID des aktuellen Browsers in die tempor?re Tabelle ein


chat.client.getUserId = function (ruserid)
{
  //二維碼生成的文本
$("#loga").attr("src", "@ViewBag.Url" + ruserid);
}

zur Darstellung der Hintergrunddaten Kehren Sie nach Erhalt der Daten zum Browser zurück


Nachdem sich der Benutzer über WeChat angemeldet hat

chat.client.userLoginSuccessful = function (r, userid) {
 if (r) {
 $.post("/Login/AddSession/", { userid: userid }, function (r2) {
 if (r2) {
 location.href = "/Home/";
 }
 })
 }
 };


Receive WeChat OpenID

$.post("/Login/AddSession/", { userid: userid }, function (r2) {

if (r2) {
location.href = "/Home/";}
})


Führen Sie ?Post“ aus, um Anmeldeinformationen im Hintergrund hinzuzufügen. Gehen Sie nach Erfolg zu /Home/Homepage

Login/WxLog.cshtml Diese Seite ist auf WeChat. ?ffnen Sie die

/// <summary>
 /// 保存微信確認登錄后返回的OPENID,做為網(wǎng)站的Session["LogUserID"]
 /// </summary>
 /// <param name="userid"></param>
 /// <returns></returns>
 public JsonResult AddSession(string userid)
 {
 Session["LogUserID"] = userid;
 return Json(true);
 }

@{
 ViewBag.Title = "WxLog";
}
<script src="~/Scripts/jquery.signalR-1.1.4.min.js"></script>
<script src="~/signalr/hubs"></script>
<script>
 $(function () {
 //連接SignalR pushHab
 var chat = $.connection.pushHub;
 //啟動
 $.connection.hub.start().done();

 $("#btnLog").click(function () {
 //登錄,發(fā)送信息到服務器
 chat.server.logUserConnected("@ViewBag.ruser","@ViewBag.LogUserID");
 });
 });
</script>
<h2>WxLog</h2>

<a href="#" id="btnLog">登錄</a>

@{
 ViewBag.Title = "Index";
}
 @Scripts.Render("~/bundles/jquery")
<script src="~/Scripts/jquery.signalR-1.1.4.min.js"></script>
<script src="~/signalr/hubs"></script>

<script type=&#39;text/javascript&#39;>
 $(function () {
 var chat = $.connection.pushHub;
 $.connection.hub.start().done(function () {
 chat.server.ruserConnected();
 });
 chat.client.getUserId = function (ruserid)
 {
 $("#loga").attr("src", "@ViewBag.Url" + ruserid);
 }
 chat.client.userLoginSuccessful = function (r, userid) {
 if (r) {
 location.href = "/Home/";
 })
 }
 };
 });

</script>
<header>
 <a href="~/Home/" class="iconfont backIcon"><</a>
 <h1>用戶登錄</h1>
</header>
<p style="height:1rem;"></p>
請使用微信登錄掃描以下二維碼生產(chǎn)圖片
<p>
 <img id="loga" src="#" width="90%" />
</p>

GetOpenIDByCode(code)-Methode

Für Benutzer, die dies getan haben folgt dem offiziellen Konto, wenn der Benutzer über die Sitzung oder das benutzerdefinierte Menü des offiziellen Kontos auf die Webautorisierungsseite dieses offiziellen Kontos zugreift, selbst wenn der Bereich snsapi_userinfo ist, wird er stillschweigend autorisiert und der Benutzer ist sich dessen nicht bewusst.

具體而言,網(wǎng)頁授權流程分為四步:
1、引導用戶進入授權頁面同意授權,獲取code
2、通過code換取網(wǎng)頁授權access_token(與基礎支持中的access_token不同)
3、如果需要,開發(fā)者可以刷新網(wǎng)頁授權access_token,避免過期
4、通過網(wǎng)頁授權access_token和openid獲取用戶基本信息(支持UnionID機制)

 public static string GetOpenIDByCode(string code)
 {
 string url =string.Format( "https://api.weixin.qq.com/sns/oauth2/access_token?appid={0}&secret={1}&code={2}&grant_type=authorization_code",AppID,AppSecret, code);
 using (System.Net.WebClient client = new System.Net.WebClient())
 {
 string tempstr= client.DownloadString( url);
 var regex= new Regex(@"\""openid\"":\""[^\""]+?\"",", RegexOptions.IgnoreCase);
 string tempstr2= regex.Match(tempstr).Value;
 return tempstr2.Substring(10, tempstr2.Length - 12);
 }
 }

Das obige ist der detaillierte Inhalt von.NET C# Beispielanalyse der Verwendung des offiziellen WeChat-Kontos zur Anmeldung auf der Website. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erkl?rung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Hei?e KI -Werkzeuge

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

Hei?e Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Hei?e Themen

PHP-Tutorial
1502
276
Der Unterschied zwischen Multithreading und asynchronem C# Der Unterschied zwischen Multithreading und asynchronem C# Apr 03, 2025 pm 02:57 PM

Der Unterschied zwischen Multithreading und Asynchron besteht darin, dass Multithreading gleichzeitig mehrere Threads ausführt, w?hrend asynchron Operationen ausführt, ohne den aktuellen Thread zu blockieren. Multithreading wird für rechenintensive Aufgaben verwendet, w?hrend asynchron für die Benutzerinteraktion verwendet wird. Der Vorteil des Multi-Threading besteht darin, die Rechenleistung zu verbessern, w?hrend der Vorteil von Asynchron nicht darin besteht, UI-Threads zu blockieren. Die Auswahl von Multithreading oder Asynchron ist von der Art der Aufgabe abh?ngt: Berechnungsintensive Aufgaben verwenden Multithreading, Aufgaben, die mit externen Ressourcen interagieren und die UI-Reaktionsf?higkeit asynchron verwenden müssen.

C# gegen C: Geschichte, Evolution und Zukunftsaussichten C# gegen C: Geschichte, Evolution und Zukunftsaussichten Apr 19, 2025 am 12:07 AM

Die Geschichte und Entwicklung von C# und C sind einzigartig, und auch die Zukunftsaussichten sind unterschiedlich. 1.C wurde 1983 von Bjarnestrustrup erfunden, um eine objektorientierte Programmierung in die C-Sprache einzuführen. Sein Evolutionsprozess umfasst mehrere Standardisierungen, z. B. C 11 Einführung von Auto-Keywords und Lambda-Ausdrücken, C 20 Einführung von Konzepten und Coroutinen und sich in Zukunft auf Leistung und Programme auf Systemebene konzentrieren. 2.C# wurde von Microsoft im Jahr 2000 ver?ffentlicht. Durch die Kombination der Vorteile von C und Java konzentriert sich seine Entwicklung auf Einfachheit und Produktivit?t. Zum Beispiel führte C#2.0 Generics und C#5.0 ein, die eine asynchrone Programmierung eingeführt haben, die sich in Zukunft auf die Produktivit?t und das Cloud -Computing der Entwickler konzentrieren.

.NET CORE Quick Start Tutorial 1. Der Anfang: über .NET Core sprechen .NET CORE Quick Start Tutorial 1. Der Anfang: über .NET Core sprechen May 07, 2025 pm 04:54 PM

1. Der Ursprung von .NetCore Wenn wir über .NetCore sprechen, dürfen wir seinen Vorg?nger .NET nicht erw?hnen. Java war zu dieser Zeit im Rampenlicht, und Microsoft bevorzugte auch Java. Die Java Virtual Machine auf der Windows -Plattform wurde von Microsoft basierend auf den JVM -Standards entwickelt. Es soll die beste Leistung Java Virtual Machine zu dieser Zeit sein. Microsoft hat jedoch einen eigenen kleinen Abakus, der versucht, Java mit der Windows-Plattform zu bündeln und einige Windows-spezifische Funktionen hinzuzufügen. Die Unzufriedenheit von Sun führte dazu zu einer Aufschlüsselung der Beziehung zwischen den beiden Parteien, und Microsoft startete dann .NET. .NET hat seit seiner Gründung viele Merkmale von Java geliehen und hat Java in Sprachmerkmalen und Formentwicklung nach und nach übertroffen. Java in Version 1.6

Was ist C# Multithreading -Programmierung? C# Multithreading -Programmierung verwendet C# Multithreading -Programmierung Was ist C# Multithreading -Programmierung? C# Multithreading -Programmierung verwendet C# Multithreading -Programmierung Apr 03, 2025 pm 02:45 PM

C# Multi-Thread-Programmierung ist eine Technologie, mit der Programme gleichzeitig mehrere Aufgaben ausführen k?nnen. Es kann die Programmeffizienz verbessern, indem es die Leistung verbessert, die Reaktionsf?higkeit verbessert und die parallele Verarbeitung implementiert. W?hrend die Thread -Klasse eine M?glichkeit bietet, Threads direkt zu erstellen, k?nnen erweiterte Tools wie Task und Async/Warted sicherer asynchroner Operationen und eine sauberere Codestruktur liefern. H?ufige Herausforderungen bei der Multithread -Programmierung umfassen Deadlocks, Rassenbedingungen und Ressourcenleckage, die eine sorgf?ltige Gestaltung von Fadenmodellen und die Verwendung geeigneter Synchronisationsmechanismen erfordern, um diese Probleme zu vermeiden.

C# .NET: Erstellen von Anwendungen mit dem .NET -?kosystem C# .NET: Erstellen von Anwendungen mit dem .NET -?kosystem Apr 27, 2025 am 12:12 AM

Wie erstelle ich Anwendungen mit .NET? Erstellen Anwendungen mit .NET k?nnen in den folgenden Schritten erreicht werden: 1) Verstehen Sie die Grundlagen von .NET, einschlie?lich C# Sprache und plattformübergreifender Entwicklungsunterstützung; 2) Kernkonzepte wie Komponenten und Arbeitsprinzipien des .NET -?kosystems lernen; 3) Master Basic und Advanced Nutzung, von einfachen Konsolenanwendungen bis hin zu komplexen Webapis- und Datenbankvorg?ngen; 4) Mit gemeinsamen Fehlern und Debugging -Techniken wie Konfigurations- und Datenbankverbindungsproblemen vertraut sein; 5) Optimierung der Anwendungsleistung und Best Practices wie asynchrone Programmieren und Zwischenspeichern.

Vom Web zum Desktop: Die Vielseitigkeit von C# .NET Vom Web zum Desktop: Die Vielseitigkeit von C# .NET Apr 15, 2025 am 12:07 AM

C#.NETisversatileforbothwebanddesktopdevelopment.1)Forweb,useASP.NETfordynamicapplications.2)Fordesktop,employWindowsFormsorWPFforrichinterfaces.3)UseXamarinforcross-platformdevelopment,enablingcodesharingacrossWindows,macOS,Linux,andmobiledevices.

Was sind die Vorteile von Multithreading in C#? Was sind die Vorteile von Multithreading in C#? Apr 03, 2025 pm 02:51 PM

Der Vorteil des Multithreading besteht darin, dass es die Leistung und die Ressourcenauslastung verbessern kann, insbesondere für die Verarbeitung gro?er Datenmengen oder die Durchführung zeitaufw?ndiger Vorg?nge. Es erm?glicht es, mehrere Aufgaben gleichzeitig auszuführen, wodurch die Effizienz verbessert wird. Zu viele Threads k?nnen jedoch zu einer Leistungsverschlechterung führen. Sie müssen daher sorgf?ltig die Anzahl der Threads basierend auf der Anzahl der CPU -Kerne und Aufgabenmerkmale ausw?hlen. Darüber hinaus beinhaltet die Multi-Thread-Programmierung Herausforderungen wie Deadlock- und Rassenbedingungen, die unter Verwendung von Synchronisationsmechanismen gel?st werden müssen, und erfordern solide Kenntnisse über die gleichzeitige Programmierung, das Abw?gen der Vor- und Nachteile und die Verwendung mit Vorsicht.

.NET Framework vs. C#: Dekodierung der Terminologie .NET Framework vs. C#: Dekodierung der Terminologie Apr 21, 2025 am 12:05 AM

.NetFramework ist ein Software -Framework, und C# ist eine Programmiersprache. 1..NetFramework bietet Bibliotheken und Dienste, die Desktop-, Web- und mobile Anwendungsentwicklung unterstützen. 2.C# ist für .Netframework entwickelt und unterstützt moderne Programmierfunktionen. 3..NETFRAMEWORK verwaltet die Codeausführung über CLR, und der C# Code wird in IL zusammengestellt und wird von CLR ausgeführt. V. 5. Zu den h?ufigen Fehlern z?hlen Typenkonvertierung und asynchrone Programmieradrocken. Visualstudio -Tools sind zum Debuggen erforderlich.

See all articles