一、C#开发—ASP.NET Web应用程序(.NET Framework)

0、写在前面

公司最近要开一个新的.net项目,可能需要我的配合,那之前只接触过php跟java的后台,为了更好的完成工作,打算先自己学习一下C#的开发,这里顺便记录一下。
有一点要做好心理准备的是,这玩意跟java一个德行,改点东西都要重新运行,新建文件、文件夹的时候都得停止运行再弄:(。。当然如果页面是html格式的是不用的。
开发软件:Visual Studio 2019
开启IIS功能:
a、快速搜索


b、选择勾选

1、新建项目

打开VS,按快捷键【Ctrl+Shift+N】,选择 ASP.NET Web应用程序(.NET Framework) ,点击下一步。
本来 ASP.NET Core Web应用程序 跨平台又开源应该是比较好的,网上查了一下 ASP.NET Web应用程序(.NET Framework) 上手要快点,就先从这里开始了。

修改项目名称,选择位置后点击创建。

选择Web API,点击创建。
为什么选择这个Web API呢,它相比MVC多了了一个Areas文件夹,还有专门的api配置,而单页应用程序呢,看起来比较复杂的样子,直接忽略不看了:)

建好后我们来看下项目的目录结构


2、运行分析

(1)运行
建好后我们就来运行一下


运行显示如下图:

(2)文件分析
a、Views
我们从视图开始看起,打开文件夹 Views ,点开第一个文件 _ViewStart.cshtml 看一下,只有一个赋值语句

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}

接着打开 _Layout.cshtml ,里面除了我们前端熟悉的html什么的,还有就是服务端的标记语法Razor(观察发现跟以前写的PHP有点像),它可以让我们在页面里写 C#,内容不熟悉感觉乱七八糟的略过不看。

同级下还有个Error.cshtml,顾名思义是错误页,也不看了。

打开 Home>Index.cshtml 看到只有中间一部分内容,我们再回到 _Layout.cshtml 看一下,去除头尾发现中间有个 @RenderBody() ,这就是渲染代码段内容的占位函数了。结构稍微清晰了点,那么我们就来一个一个看下里面的C#语句。


<title>@ViewBag.Title</title>

这个显而易见应该是一个变量,不同的页面设置不同的值显示。


 @Html.ActionLink("应用程序名称", "Index", "Home", new { area = "" }, new { @class = "navbar-brand" })

将下面一句代码对照运行起来的页面查看
@Html.ActionLink 这个是渲染 a 标签链接的;
"应用程序名称": 毫无疑问是名称;
"Index"、"Home" :问了度娘,分别是方法名,控制器名,具体对应先放在这 ;
new { area = "" }:默认的功能模块;
new { @class = "navbar-brand" }:标签的 class 名。


    @Styles.Render("~/Content/css")
    @Scripts.Render("~/bundles/modernizr")

   @Scripts.Render("~/bundles/jquery")
   @Scripts.Render("~/bundles/bootstrap")

再看这四句鬼东西,全局搜索一下 ~/Content/css ,在 App_Start/BundleConfig.cs 里找到了绑定信息,绑定可以用通配符、多条聚集逗号隔开。
BundleConfig.cs

bundles.Add(new ScriptBundle("~/bundles/jquery").Include( "~/Scripts/jquery-{version}.js"));
bundles.Add(new ScriptBundle("~/bundles/modernizr").Include( "~/Scripts/modernizr-*"));
bundles.Add(new ScriptBundle("~/bundles/bootstrap").Include( "~/Scripts/bootstrap.js"));  
bundles.Add(newStyleBundle("~/Content/css").Include("~/Content/bootstrap.css","~/Content/site.css"));

@RenderBody()

呈现内容的


 <p>&copy; @DateTime.Now.Year - 我的 ASP.NET 应用程序</p>

系统自带时间函数


@RenderSection("scripts", required: false)

这个问了度娘,是定义了代码区域名字用来引入的,这个项目里都没有定义 "scripts" 区域,忽略不看就是。好奇的小伙伴可以在 Home>Index.cshtml 的后面加上下面的语句,查看下页面代码,主页多了一个引用,API页面是没有的。

@section scripts{
    @Scripts.Render("~/bundles/jquery")
}

b、Controllers
HomeControllers.cs
这里面一个命名空间一个类一个方法。我们尝试自己新建一个方法。

namespace MyWebApp.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            ViewBag.Title = "Home Page";   //定义了页面 <title>
            return View();    //返回 ActionResult  类型的视图
        }
+        public ActionResult Test()
+        {
+            ViewBag.Title = "Test Page";
+            return View();
+        }
    }
}

新建视图

Views/Home/Test.cshtml

@{
    ViewBag.Title = "Test";
}
<h2>Test</h2>

修改 Views/Shared/_Layout.cshtml

                <ul class="nav navbar-nav">
                    <li>@Html.ActionLink("主页", "Index", "Home", new { area = "" }, null)</li>
+                   <li>@Html.ActionLink("Test页", "Test", "Home", new { area = "" }, null)</li>
                    <li>@Html.ActionLink("API", "Index", "Help", new { area = "" }, null)</li>
                </ul>

启动访问一下,看到标题栏是 Test 而不是 Test Page,原来自动创建的视图里给定义覆盖了。

新建控制器
照葫芦画瓢,我们自己建一个控制器看看。


默认空的 MVC 5 控制器直接点击添加。

修改名称,点击添加

Controllers/ListController.cs,引用的包就不贴了

namespace MyWebApp.Controllers
{
    public class ListController : Controller
    {
        // GET: List
        public ActionResult Index()
        {
            return View();
        }
    }
}

看到上面有个 // GET:List 的提示,我们启动项目在浏览器里访问看看。下图中报错了,重点看红框内容。我们看到一个比较熟的,跟Home类似嘛,下面我们新建一个 List 文件夹


新建 Views/List/Index.cshtml,我们修改自动生成的代码

@{
-    ViewBag.Title = "Index";
+    ViewBag.Title = "List Index";
}

- <h2>Index</h2>
+ <h2>List Index</h2>

运行一下访问如下图,这里我们知道 ActionResult return View()是要有对应的视图的,系统会自动关联起来。



通过链接访问,修改 _layout.cshtml

                   <li>@Html.ActionLink("主页", "Index", "Home", new { area = "" }, null)</li>
                    <li>@Html.ActionLink("Test页", "Test", "Home", new { area = "" }, null)</li>
+                   <li>@Html.ActionLink("List", "Index", "List", new { area = "" }, null)</li>
                    <li>@Html.ActionLink("API", "Index", "Help", new { area = "" }, null)</li>

通过链接访问成功 :)


ValuesController.cs
新建项目自动生成的还有这个控制器,就是对应的API了,我们打开文件看一下都有相应的访问提示,我们在浏览器里试试看。返回的结果跟我们前端开发时一般返回的json格式是不一样的,不过也是接口就是。
// GET api/values

// GET api/values/5

这个看的有点头疼了回头再详细了解,接下来,我们先小结一下再自己写一个接口看看。
小结:Controller文件夹 里的控制器以 Controller 结尾,若有返回视图的方法则会自动用该 Controller 前面的名称和方法名称分别对应到 Views文件夹 中的一级文件夹和里面的同名文件

3、写接口

这部分当然是先参考学习了公司现有项目,这里先只简单粗暴的返回固定的json值,连接数据库还是下篇写了。I need teke a rest :)

我们这里在Test.cshtm用ajax发送请求,先把 _Layout.cshtml 里@Scripts.Render("~/bundles/jquery")移到head里去。

修改 Views/Home/Test.cshtml


@{
    ViewBag.Title = "Test";
}

<h2>Test</h2>
+ <script>
+     $.ajax({
+         url: '/home/json1',
+         dataType: 'json',
+         success(data) {
+             console.log(data)
+         }
+     })
+ </script>

修改 Controller/HomeController.cs

namespace MyWebApp.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            ViewBag.Title = "Home Page";
            return View();
        }
        public ActionResult Test()
        {
            ViewBag.Title = "Test Page";
            return View();
        }

+        public JsonResult Json1()
+        {
+            return Json(new { status = 0, msg="success",data =new int[5] { 99, 98, 92, 97, 95 } }, JsonRequestBehavior.AllowGet);
+        }
    }
}

保存运行,访问Test页,请看截图,成功咯。


4、发布到IIS

我们开头就已经打开了IIS服务,现在我们来发布一下。

搜索打开IIS管理器

在网站上右击,选择添加网站

填写配置网站信息

接下来在VS中配置项目信息,如下图:


修改两个红框中信息后,点击创建虚拟目录。如果提示不能创建,可能VS不是用管理员权限打开的,得用管理员权限打开才行。

最后修改C:\Windows\System32\drivers\etc\hosts ,将下面一句添加到文尾保存即可,然后重新启动刚刚新建的站点生效。

127.0.0.1 MyWebApp.com

现在运行一下,看看这里已经变成了 本地IIS

运行效果如下图:

感谢阅读,喜欢的话点个赞吧:)
更多内容请关注后续文章。。。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342