三好一满意自查报告,烽火三国路,人参叶
controller
结尾controllerattribute
标注public class testcontroller : controller { } [controller] public class test : controller { }
{domain}/{controller}/{action}
querystring
: ?name=zhangsan&age=22form
cookie
session
header
public iactionresult hello() { // query var name = request.query["name"]; // querystring var query = request.querystring.value; // form var username = request.form["username"]; // cookies var cookie = request.cookies["item"]; // headers var headers = request.headers["salt"]; return content("hello"); }
public iactionresult hello() { // byte[] httpcontext.session.set("byte", new byte[] { 1, 2, 3, 4, 5 }); var bytes = httpcontext.session.get("byte"); // string httpcontext.session.setstring("name", "tom"); var name = httpcontext.session.getstring("name"); // int httpcontext.session.setint32("id", 20); var id = httpcontext.session.getint32("id"); httpcontext.session.remove("name"); httpcontext.session.clear(); return content("hello"); }
public iactionresult hello(requestmodel request,int? age) { // 查询字符串 var test = request.query["test"]; // 简单类型 var userage = age; // 自定义类型 var name = request.name; return content("hello"); } public class requestmodel { public string name { get; set; } }
noncontrollerattribute
/// <summary> /// 拍卖师控制类 /// </summary> [noncontroller] public class auctioncontroller { }
特性 | 数据源 |
---|---|
fromheaderattribute | 请求头数据 |
fromrouteattribute | 路由数据 |
frombodyattribute | 请求体 |
fromformattribute | 表单数据 |
fromqueryattribute | 查询字符串 |
fromservicesattribute | 服务注册 |
public iactionresult say( [fromform]string name, [fromquery]int age, [fromheader] string salt, [frombody] string content ) { return view(); }
viewdata | viewbag |
---|---|
键值对 | 动态类型 |
索引器 | viewdata的封装 |
支持任意类型 | 动态属性 |
tempdata | cache | session |
---|---|---|
视图级别 | 应用程序级别 | 会话级别 |
只允许消费一次 | 服务器端保存 | 服务器端保存 |
可多次赋值 | 可设置有效期 | 键值对形式 |
键值对形式 | 键值对形式 |
[controller] public class test : controller { private readonly imemorycache _cache; public test(imemorycache memorycache) { this._cache = memorycache; } public iactionresult readcache() { _cache.set("name","tom"); _cache.get("name"); _cache.set("age",30); _cache.get("age"); user tom = new user(){ name = "admin",pwd = "123456"}; _cache.set<user>("user",tom); _cache.get<user>("user"); return content("ok"); } } public class user { public string name { get; set; } public string pwd { get; set; } }
validationattribute
public abstract class validationattribute : attribute { /// <summary>initializes a new instance of the <see cref="t:system.componentmodel.dataannotations.validationattribute"></see> class.</summary> protected validationattribute(); /// <summary>initializes a new instance of the <see cref="t:system.componentmodel.dataannotations.validationattribute"></see> class by using the function that enables access to validation resources.</summary> /// <param name="errormessageaccessor">the function that enables access to validation resources.</param> /// <exception cref="t:system.argumentnullexception"><paramref name="errormessageaccessor">errormessageaccessor</paramref> is null.</exception> protected validationattribute(func<string> errormessageaccessor); /// <summary>initializes a new instance of the <see cref="t:system.componentmodel.dataannotations.validationattribute"></see> class by using the error message to associate with a validation control.</summary> /// <param name="errormessage">the error message to associate with a validation control.</param> protected validationattribute(string errormessage); /// <summary>gets or sets an error message to associate with a validation control if validation fails.</summary> /// <returns>the error message that is associated with the validation control.</returns> public string errormessage { get; set; } /// <summary>gets or sets the error message resource name to use in order to look up the <see cref="p:system.componentmodel.dataannotations.validationattribute.errormessageresourcetype"></see> property value if validation fails.</summary> /// <returns>the error message resource that is associated with a validation control.</returns> public string errormessageresourcename { get; set; } /// <summary>gets or sets the resource type to use for error-message lookup if validation fails.</summary> /// <returns>the type of error message that is associated with a validation control.</returns> public type errormessageresourcetype { get; set; } /// <summary>gets the localized validation error message.</summary> /// <returns>the localized validation error message.</returns> protected string errormessagestring { get; } /// <summary>gets a value that indicates whether the attribute requires validation context.</summary> /// <returns>true if the attribute requires validation context; otherwise, false.</returns> public virtual bool requiresvalidationcontext { get; } /// <summary>applies formatting to an error message, based on the data field where the error occurred.</summary> /// <param name="name">the name to include in the formatted message.</param> /// <returns>an instance of the formatted error message.</returns> public virtual string formaterrormessage(string name); /// <summary>checks whether the specified value is valid with respect to the current validation attribute.</summary> /// <param name="value">the value to validate.</param> /// <param name="validationcontext">the context information about the validation operation.</param> /// <returns>an instance of the <see cref="system.componentmodel.dataannotations.validationresult"></see> class.</returns> public validationresult getvalidationresult( object value, validationcontext validationcontext); /// <summary>determines whether the specified value of the object is valid.</summary> /// <param name="value">the value of the object to validate.</param> /// <returns>true if the specified value is valid; otherwise, false.</returns> public virtual bool isvalid(object value); /// <summary>validates the specified value with respect to the current validation attribute.</summary> /// <param name="value">the value to validate.</param> /// <param name="validationcontext">the context information about the validation operation.</param> /// <returns>an instance of the <see cref="system.componentmodel.dataannotations.validationresult"></see> class.</returns> protected virtual validationresult isvalid( object value, validationcontext validationcontext); /// <summary>validates the specified object.</summary> /// <param name="value">the object to validate.</param> /// <param name="validationcontext">the <see cref="t:system.componentmodel.dataannotations.validationcontext"></see> object that describes the context where the validation checks are performed. this parameter cannot be null.</param> /// <exception cref="t:system.componentmodel.dataannotations.validationexception">validation failed.</exception> public void validate(object value, validationcontext validationcontext); /// <summary>validates the specified object.</summary> /// <param name="value">the value of the object to validate.</param> /// <param name="name">the name to include in the error message.</param> /// <exception cref="t:system.componentmodel.dataannotations.validationexception"><paramref name="value">value</paramref> is not valid.</exception> public void validate(object value, string name); }
public class userlogin { [required(errormessage = "用户名不能为空")] [stringlength(10,errormessage = "用户名长度不能超过10位")] public string username { get; set; } //[required(errormessage = "密码不能为空")] [stringlength(6,errormessage = "密码长度不能超过6位")] public string password { get; set; } }
public class formcontroller : controller { public iactionresult index() { return view(new userlogin()); } public iactionresult postdata(userlogin login) { return content(modelstate.isvalid?"数据有效":"数据无效"); } }
@model lesson2.models.userlogin @{ layout = null; } <!doctype html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>index</title> <script src="~/lib/jquery/dist/jquery.min.js"></script> <script src="~/lib/jquery-validation/dist/jquery.validate.min.js"></script> <script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"></script> </head> <body> <form asp-action="postdata" method="post"> <table> <tr> <td>用户名</td> <td>@html.textboxfor(m => m.username)</td> <td>@html.validationmessagefor(m => m.username)</td> </tr> <tr> <td>密码</td> <td>@html.passwordfor(m => m.password)</td> <td>@html.validationmessagefor(m => m.password)</td> </tr> <tr> <td></td> <td><input type="submit" value="登录" /></td> <td></td> </tr> </table> </form> </body> </html>
app.usemvc(routes => { routes.maproute( name: "default", template: "{controller=home}/{action=index}/{id?}"); routes.maproute( name: "admin_default", template: "admin/{controller=home}/{action=index}/{id?}"); });
[route("admin/form")] public class formcontroller : controller { [route("index")] public iactionresult index() { return view(new userlogin()); } public iactionresult postdata(userlogin login) { return content(modelstate.isvalid?"数据有效":"数据无效"); } }
约束 | 示例 | 说明 |
---|---|---|
required | "product/{productname:required}" | 参数必选 |
alpha | "product/{productname:alpha}" | 匹配字母,大小写不限 |
int | "product/{productid:int}" | 匹配int类型 |
··· | ··· | ··· |
composite | "product/{productid:composite}" | 匹配composite类型 |
length | "product/{productname:length(5)}" | 长度必须是5个字符 |
length | "product/{productname:length(5)}" | 长度在5-10之间 |
maxlength | "product/{productid:maxlength(10)}" | 最大长度为10 |
minlength | "product/{productid:minlength(3)}" | 最小长度为3 |
min | "product/{productid:min(3)}" | 大于等于3 |
max | "product/{productid:max(10)}" | 小于等于10 |
range | "product/{productid:range(5,10)}" | 对应的数组在5-10之间 |
regex | "product/{productid:regex(^\d{4}$)}" | 符合指定的正则表达式 |
formrouteattribute
匹配参数与路由数据的映射关系public iactionresult index([fromroute] int? id) { return view(); }
visual studio
发布应用:项目右键 -> 发布 -> 发布方式选择...
dotnet publish
命令行工具发布:dotnet publish --configuration release --runtime win7-x64 --output c:\svc
.csproj
文件mvcrazorcompileonpublish
为false
<project sdk="microsoft.net.sdk.web"> <propertygroup> <targetframework>netcoreapp2.1</targetframework> <!-- 关闭视图预编译 --> <mvcrazorcompileonpublish>false</mvcrazorcompileonpublish> </propertygroup> <itemgroup> <packagereference include="microsoft.aspnetcore.app" /> <packagereference include="microsoft.aspnetcore.razor.design" version="2.1.2" privateassets="all" /> <packagereference include="microsoft.visualstudio.web.codegeneration.design" version="2.1.1" /> </itemgroup> </project>
<!-- 依赖框架的部署 (fdd) --> <propertygroup> <targetframework>netcoreapp2.2</targetframework> <runtimeidentifier>win7-x64</runtimeidentifier> <selfcontained>false</selfcontained> <istransformwebconfigdisabled>true</istransformwebconfigdisabled> </propertygroup> <!-- 独立部署 (scd) --> <propertygroup> <targetframework>netcoreapp2.2</targetframework> <runtimeidentifier>win7-x64</runtimeidentifier> <istransformwebconfigdisabled>true</istransformwebconfigdisabled> </propertygroup> ... ... ...
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Net Core Web Api项目与在NginX下发布的方法
asp.net core3.1 引用的元包dll版本兼容性问题解决方案
IdentityServer4实现.Net Core API接口权限认证(快速入门)
ASP.NET Core MVC通过IViewLocationExpander扩展视图搜索路径的实现
网友评论