From a337e4f0bddf996552fa3e9cb6658ad287a0e702 Mon Sep 17 00:00:00 2001 From: Deep Choudhery <54324771+deepchoudhery@users.noreply.github.com> Date: Thu, 16 Feb 2023 13:29:17 -0800 Subject: [PATCH 1/3] add dotnet new templates (razor view, api controller, mvc controller) (#1) * added razor view * fix identity for razor view item template * added api controller * fixed api, added mvc controller * pr comment fixes * PR comment fixes 2 --- .../.template.config/dotnetcli.host.json | 3 + .../localize/templatestrings.en.json | 9 ++ .../.template.config/template.json | 58 ++++++++++++ .../content/ApiController/ValueController.cs | 48 ++++++++++ .../.template.config/dotnetcli.host.json | 3 + .../localize/templatestrings.en.json | 9 ++ .../.template.config/template.json | 58 ++++++++++++ .../content/MvcController/HomeController.cs | 88 +++++++++++++++++++ .../.template.config/dotnetcli.host.json | 3 + .../localize/templatestrings.en.json | 6 ++ .../RazorView/.template.config/template.json | 40 +++++++++ .../content/RazorView/Index.cshtml | 5 ++ 12 files changed, 330 insertions(+) create mode 100644 src/ProjectTemplates/Web.ItemTemplates/content/ApiController/.template.config/dotnetcli.host.json create mode 100644 src/ProjectTemplates/Web.ItemTemplates/content/ApiController/.template.config/localize/templatestrings.en.json create mode 100644 src/ProjectTemplates/Web.ItemTemplates/content/ApiController/.template.config/template.json create mode 100644 src/ProjectTemplates/Web.ItemTemplates/content/ApiController/ValueController.cs create mode 100644 src/ProjectTemplates/Web.ItemTemplates/content/MvcController/.template.config/dotnetcli.host.json create mode 100644 src/ProjectTemplates/Web.ItemTemplates/content/MvcController/.template.config/localize/templatestrings.en.json create mode 100644 src/ProjectTemplates/Web.ItemTemplates/content/MvcController/.template.config/template.json create mode 100644 src/ProjectTemplates/Web.ItemTemplates/content/MvcController/HomeController.cs create mode 100644 src/ProjectTemplates/Web.ItemTemplates/content/RazorView/.template.config/dotnetcli.host.json create mode 100644 src/ProjectTemplates/Web.ItemTemplates/content/RazorView/.template.config/localize/templatestrings.en.json create mode 100644 src/ProjectTemplates/Web.ItemTemplates/content/RazorView/.template.config/template.json create mode 100644 src/ProjectTemplates/Web.ItemTemplates/content/RazorView/Index.cshtml diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/ApiController/.template.config/dotnetcli.host.json b/src/ProjectTemplates/Web.ItemTemplates/content/ApiController/.template.config/dotnetcli.host.json new file mode 100644 index 000000000000..94f4ee10148d --- /dev/null +++ b/src/ProjectTemplates/Web.ItemTemplates/content/ApiController/.template.config/dotnetcli.host.json @@ -0,0 +1,3 @@ +{ + "$schema": "http://json.schemastore.org/dotnetcli.host" +} diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/ApiController/.template.config/localize/templatestrings.en.json b/src/ProjectTemplates/Web.ItemTemplates/content/ApiController/.template.config/localize/templatestrings.en.json new file mode 100644 index 000000000000..5046461e45b8 --- /dev/null +++ b/src/ProjectTemplates/Web.ItemTemplates/content/ApiController/.template.config/localize/templatestrings.en.json @@ -0,0 +1,9 @@ +{ + "author": "Microsoft", + "name": "API Controller", + "description": "API Controller with or without read/write actions", + "symbols/namespace/description": "namespace for the generated code", + "symbols/actions/description": "create controller with read/write actions", + "symbols/actions/displayName": "Add ReadWrite Actions", + "postActions/openInEditor/description": "Opens ValueController.cs in the editor" +} diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/ApiController/.template.config/template.json b/src/ProjectTemplates/Web.ItemTemplates/content/ApiController/.template.config/template.json new file mode 100644 index 000000000000..6e4b4c0dc3c8 --- /dev/null +++ b/src/ProjectTemplates/Web.ItemTemplates/content/ApiController/.template.config/template.json @@ -0,0 +1,58 @@ +{ + "$schema": "http://json.schemastore.org/template", + "author": "Microsoft", + "classifications": [ "Web", "ASP.NET" ], + "name": "API Controller", + "generatorVersions": "[1.0.0.0-*)", + "description": "API Controller with or without read/write actions", + "tags": { + "language": "C#", + "type": "item" + }, + "groupIdentity": "Microsoft.AspNetCore.Mvc.ApiController", + "precedence": "9800", + "identity": "Microsoft.AspNetCore.Mvc.ApiController.8.0", + "shortName": "apicontroller", + "sourceName": "ValueController", + "primaryOutputs": [ + { + "path": "ValueController.cs" + } + ], + "defaultName": "ValueController", + "symbols": { + "namespace": { + "description": "namespace for the generated code", + "replaces": "MyApp.Namespace", + "type": "parameter" + }, + "actions": { + "description": "create controller with read/write actions", + "displayName": "Add ReadWrite Actions", + "type": "parameter", + "datatype": "bool", + "defaultValue": "false" + }, + "HostIdentifier": { + "type": "bind", + "binding": "HostIdentifier" + }, + "NameIsController": { + "type": "computed", + "value": "(name == \"ControllerBase\")" + } + }, + "postActions": [ + { + "id": "openInEditor", + "condition": "(HostIdentifier != \"dotnetcli\" && HostIdentifier != \"dotnetcli-preview\")", + "description": "Opens ValueController.cs in the editor", + "manualInstructions": [ ], + "actionId": "84C0DA21-51C8-4541-9940-6CA19AF04EE6", + "args": { + "files": "0" + }, + "continueOnError": true + } + ] +} diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/ApiController/ValueController.cs b/src/ProjectTemplates/Web.ItemTemplates/content/ApiController/ValueController.cs new file mode 100644 index 000000000000..e6a4670ed470 --- /dev/null +++ b/src/ProjectTemplates/Web.ItemTemplates/content/ApiController/ValueController.cs @@ -0,0 +1,48 @@ +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; + +namespace MyApp.Namespace +{ + [Route("api/[controller]")] + [ApiController] + #if NameIsController + public class ValuesController : Microsoft.AspNetCore.Mvc.ControllerBase + #else + public class ValuesController : ControllerBase + #endif + { + #if(actions) + // GET: api/<ValuesController> + [HttpGet] + public IEnumerable<string> Get() + { + return new string[] { "value1", "value2" }; + } + + // GET api/<ValuesController>/5 + [HttpGet("{id}")] + public string Get(int id) + { + return "value"; + } + + // POST api/<ValuesController> + [HttpPost] + public void Post([FromBody] string value) + { + } + + // PUT api/<ValuesController>/5 + [HttpPut("{id}")] + public void Put(int id, [FromBody] string value) + { + } + + // DELETE api/<ValuesController>/5 + [HttpDelete("{id}")] + public void Delete(int id) + { + } + #endif + } +} diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/MvcController/.template.config/dotnetcli.host.json b/src/ProjectTemplates/Web.ItemTemplates/content/MvcController/.template.config/dotnetcli.host.json new file mode 100644 index 000000000000..94f4ee10148d --- /dev/null +++ b/src/ProjectTemplates/Web.ItemTemplates/content/MvcController/.template.config/dotnetcli.host.json @@ -0,0 +1,3 @@ +{ + "$schema": "http://json.schemastore.org/dotnetcli.host" +} diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/MvcController/.template.config/localize/templatestrings.en.json b/src/ProjectTemplates/Web.ItemTemplates/content/MvcController/.template.config/localize/templatestrings.en.json new file mode 100644 index 000000000000..34e6bebd0542 --- /dev/null +++ b/src/ProjectTemplates/Web.ItemTemplates/content/MvcController/.template.config/localize/templatestrings.en.json @@ -0,0 +1,9 @@ +{ + "author": "Microsoft", + "name": "MVC Controller", + "description": "MVC Controller with or without read/write actions", + "symbols/namespace/description": "namespace for the generated code", + "symbols/actions/description": "create controller with read/write actions", + "symbols/actions/displayName": "Add ReadWrite Actions", + "postActions/openInEditor/description": "Opens HomeController.cs in the editor" +} diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/MvcController/.template.config/template.json b/src/ProjectTemplates/Web.ItemTemplates/content/MvcController/.template.config/template.json new file mode 100644 index 000000000000..14a3866a1761 --- /dev/null +++ b/src/ProjectTemplates/Web.ItemTemplates/content/MvcController/.template.config/template.json @@ -0,0 +1,58 @@ +{ + "$schema": "http://json.schemastore.org/template", + "author": "Microsoft", + "classifications": [ "Web", "ASP.NET" ], + "name": "MVC Controller", + "generatorVersions": "[1.0.0.0-*)", + "description": "MVC Controller with or without read/write actions", + "tags": { + "language": "C#", + "type": "item" + }, + "groupIdentity": "Microsoft.AspNetCore.Mvc.MvcController", + "precedence": "9800", + "identity": "Microsoft.AspNetCore.Mvc.MvcController.8.0", + "shortName": "mvccontroller", + "sourceName": "HomeController", + "primaryOutputs": [ + { + "path": "HomeController.cs" + } + ], + "defaultName": "HomeController", + "symbols": { + "namespace": { + "description": "namespace for the generated code", + "replaces": "MyApp.Namespace", + "type": "parameter" + }, + "actions": { + "description": "create controller with read/write actions", + "displayName": "Add ReadWrite Actions", + "type": "parameter", + "datatype": "bool", + "defaultValue": "false" + }, + "HostIdentifier": { + "type": "bind", + "binding": "HostIdentifier" + }, + "NameIsController": { + "type": "computed", + "value": "(name == \"Controller\")" + } + }, + "postActions": [ + { + "id": "openInEditor", + "condition": "(HostIdentifier != \"dotnetcli\" && HostIdentifier != \"dotnetcli-preview\")", + "description": "Opens HomeController.cs in the editor", + "manualInstructions": [ ], + "actionId": "84C0DA21-51C8-4541-9940-6CA19AF04EE6", + "args": { + "files": "0" + }, + "continueOnError": true + } + ] +} diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/MvcController/HomeController.cs b/src/ProjectTemplates/Web.ItemTemplates/content/MvcController/HomeController.cs new file mode 100644 index 000000000000..470119f928f6 --- /dev/null +++ b/src/ProjectTemplates/Web.ItemTemplates/content/MvcController/HomeController.cs @@ -0,0 +1,88 @@ +using Microsoft.AspNetCore.Mvc; + +namespace MyApp.Namespace +{ + #if NameIsController + public class HomeController : Microsoft.AspNetCore.Mvc.Controller + #else + public class HomeController : Controller + #endif + { + // GET: HomeController + public ActionResult Index() + { + return View(); + } + + #if(actions) + // GET: HomeController/Details/5 + public ActionResult Details(int id) + { + return View(); + } + + // GET: HomeController/Create + public ActionResult Create() + { + return View(); + } + + // POST: HomeController/Create + [HttpPost] + [ValidateAntiForgeryToken] + public ActionResult Create(IFormCollection collection) + { + try + { + return RedirectToAction(nameof(Index)); + } + catch + { + return View(); + } + } + + // GET: HomeController/Edit/5 + public ActionResult Edit(int id) + { + return View(); + } + + // POST: HomeController/Edit/5 + [HttpPost] + [ValidateAntiForgeryToken] + public ActionResult Edit(int id, IFormCollection collection) + { + try + { + return RedirectToAction(nameof(Index)); + } + catch + { + return View(); + } + } + + // GET: HomeController/Delete/5 + public ActionResult Delete(int id) + { + return View(); + } + + // POST: HomeController/Delete/5 + [HttpPost] + [ValidateAntiForgeryToken] + public ActionResult Delete(int id, IFormCollection collection) + { + try + { + return RedirectToAction(nameof(Index)); + } + catch + { + return View(); + } + } + #endif + } +} diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/RazorView/.template.config/dotnetcli.host.json b/src/ProjectTemplates/Web.ItemTemplates/content/RazorView/.template.config/dotnetcli.host.json new file mode 100644 index 000000000000..94f4ee10148d --- /dev/null +++ b/src/ProjectTemplates/Web.ItemTemplates/content/RazorView/.template.config/dotnetcli.host.json @@ -0,0 +1,3 @@ +{ + "$schema": "http://json.schemastore.org/dotnetcli.host" +} diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/RazorView/.template.config/localize/templatestrings.en.json b/src/ProjectTemplates/Web.ItemTemplates/content/RazorView/.template.config/localize/templatestrings.en.json new file mode 100644 index 000000000000..4035fb703792 --- /dev/null +++ b/src/ProjectTemplates/Web.ItemTemplates/content/RazorView/.template.config/localize/templatestrings.en.json @@ -0,0 +1,6 @@ +{ + "author": "Microsoft", + "name": "Razor View", + "description": "A Razor view without a page model", + "postActions/openInEditor/description": "Opens Index.cshtml in the editor" +} diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/RazorView/.template.config/template.json b/src/ProjectTemplates/Web.ItemTemplates/content/RazorView/.template.config/template.json new file mode 100644 index 000000000000..6b4dc1cce73f --- /dev/null +++ b/src/ProjectTemplates/Web.ItemTemplates/content/RazorView/.template.config/template.json @@ -0,0 +1,40 @@ +{ + "$schema": "http://json.schemastore.org/template", + "author": "Microsoft", + "classifications": [ "Web", "ASP.NET" ], + "name": "Razor View", + "generatorVersions": "[1.0.0.0-*)", + "description": "Am empty razor view", + "tags": { + "language": "C#", + "type": "item" + }, + "groupIdentity": "Microsoft.AspNetCore.Mvc.RazorView", + "precedence": "9800", + "identity": "Microsoft.AspNetCore.Mvc.RazorView.8.0", + "shortName": "view", + "sourceName": "Index", + "primaryOutputs": [ + { "path": "Index.cshtml" } + ], + "defaultName": "Index", + "symbols": { + "HostIdentifier": { + "type": "bind", + "binding": "HostIdentifier" + } + }, + "postActions": [ + { + "id": "openInEditor", + "condition": "(HostIdentifier != \"dotnetcli\" && HostIdentifier != \"dotnetcli-preview\")", + "description": "Opens Index.cshtml in the editor", + "manualInstructions": [ ], + "actionId": "84C0DA21-51C8-4541-9940-6CA19AF04EE6", + "args": { + "files": "0" + }, + "continueOnError": true + } + ] +} diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/RazorView/Index.cshtml b/src/ProjectTemplates/Web.ItemTemplates/content/RazorView/Index.cshtml new file mode 100644 index 000000000000..d56cc57f6272 --- /dev/null +++ b/src/ProjectTemplates/Web.ItemTemplates/content/RazorView/Index.cshtml @@ -0,0 +1,5 @@ +@* + For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860 +*@ +@{ +} From 4a94fc4d810da905b0abe1a34d8576bf9e822ff8 Mon Sep 17 00:00:00 2001 From: deepchoudhery <decho@microsoft.com> Date: Thu, 16 Feb 2023 13:38:18 -0800 Subject: [PATCH 2/3] fixing postActions.description --- .../content/ApiController/.template.config/template.json | 2 +- .../content/MvcController/.template.config/template.json | 2 +- .../content/RazorView/.template.config/template.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/ApiController/.template.config/template.json b/src/ProjectTemplates/Web.ItemTemplates/content/ApiController/.template.config/template.json index 6e4b4c0dc3c8..b2cf79254082 100644 --- a/src/ProjectTemplates/Web.ItemTemplates/content/ApiController/.template.config/template.json +++ b/src/ProjectTemplates/Web.ItemTemplates/content/ApiController/.template.config/template.json @@ -46,7 +46,7 @@ { "id": "openInEditor", "condition": "(HostIdentifier != \"dotnetcli\" && HostIdentifier != \"dotnetcli-preview\")", - "description": "Opens ValueController.cs in the editor", + "description": "Opens the created controller in the editor", "manualInstructions": [ ], "actionId": "84C0DA21-51C8-4541-9940-6CA19AF04EE6", "args": { diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/MvcController/.template.config/template.json b/src/ProjectTemplates/Web.ItemTemplates/content/MvcController/.template.config/template.json index 14a3866a1761..92917953eab3 100644 --- a/src/ProjectTemplates/Web.ItemTemplates/content/MvcController/.template.config/template.json +++ b/src/ProjectTemplates/Web.ItemTemplates/content/MvcController/.template.config/template.json @@ -46,7 +46,7 @@ { "id": "openInEditor", "condition": "(HostIdentifier != \"dotnetcli\" && HostIdentifier != \"dotnetcli-preview\")", - "description": "Opens HomeController.cs in the editor", + "description": "Opens the created controller in the editor", "manualInstructions": [ ], "actionId": "84C0DA21-51C8-4541-9940-6CA19AF04EE6", "args": { diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/RazorView/.template.config/template.json b/src/ProjectTemplates/Web.ItemTemplates/content/RazorView/.template.config/template.json index 6b4dc1cce73f..602f10bc76c1 100644 --- a/src/ProjectTemplates/Web.ItemTemplates/content/RazorView/.template.config/template.json +++ b/src/ProjectTemplates/Web.ItemTemplates/content/RazorView/.template.config/template.json @@ -28,7 +28,7 @@ { "id": "openInEditor", "condition": "(HostIdentifier != \"dotnetcli\" && HostIdentifier != \"dotnetcli-preview\")", - "description": "Opens Index.cshtml in the editor", + "description": "Opens the created view in the editor", "manualInstructions": [ ], "actionId": "84C0DA21-51C8-4541-9940-6CA19AF04EE6", "args": { From 523ef3484b657a668d33614fcce1a8264c2b3ff1 Mon Sep 17 00:00:00 2001 From: deepchoudhery <decho@microsoft.com> Date: Thu, 16 Feb 2023 23:01:11 -0800 Subject: [PATCH 3/3] changed encoding for razor view Index.cshtml --- .../Web.ItemTemplates/content/RazorView/Index.cshtml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ProjectTemplates/Web.ItemTemplates/content/RazorView/Index.cshtml b/src/ProjectTemplates/Web.ItemTemplates/content/RazorView/Index.cshtml index d56cc57f6272..e1dd794fdb1c 100644 --- a/src/ProjectTemplates/Web.ItemTemplates/content/RazorView/Index.cshtml +++ b/src/ProjectTemplates/Web.ItemTemplates/content/RazorView/Index.cshtml @@ -1,4 +1,4 @@ -@* +@* For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860 *@ @{