本篇文章给大家谈谈如何将对象发布到WebAPI,以及如何将对象写入文件的知识点,同时本文还将给你拓展ASP.NETWEBAPI:如果禁用了CORS,为什么我可以从localhost发布到webapi?
本篇文章给大家谈谈如何将对象发布到WebAPI,以及如何将对象写入文件的知识点,同时本文还将给你拓展ASP.NET WEB API:如果禁用了 CORS,为什么我可以从 localhost 发布到 web api?、asp.net WebApi WebApiConfig.cs Web API 配置和服务、Asp.net WebApi WebApiConfig.cs(Web API 配置和服务)、ASP.NET WebApi 学习与实践系列(1)---如何创建 WebApi等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:- 如何将对象发布到WebAPI(如何将对象写入文件)
- ASP.NET WEB API:如果禁用了 CORS,为什么我可以从 localhost 发布到 web api?
- asp.net WebApi WebApiConfig.cs Web API 配置和服务
- Asp.net WebApi WebApiConfig.cs(Web API 配置和服务)
- ASP.NET WebApi 学习与实践系列(1)---如何创建 WebApi
如何将对象发布到WebAPI(如何将对象写入文件)
我试图弄清楚如何将对象从表单发布到Web api服务。在我的控制器中,我定义了一个想要向其添加输入值的模型。
$scope.Label;
在我的输入字段中,我将它们绑定起来,ng-model
例如:
<input type="checkbox" ng-model="label.isPublic" /><input type="text" ng-model="label.labelName" required focus-me />
在提交表单时,将这两个字段传递给我的服务并提交给我的WebApi
我已经通过两种方式尝试了此提交:
function addLabel(label) { var mylabel = encodeURIComponent(angular.toJson(label)); return $http.post(''reportLibrary/createlabel/'', { params: label }, { }).then(function (response) { return response.data; }); };
并且也如下,不声明参数
function addLabel(label) { var mylabel = encodeURIComponent(angular.toJson(label)); return $http.post(''reportLibrary/createlabel/'', label , { }).then(function (response) { return response.data; }); };
在webAPI中,我为帖子设置了一个方法
[Route ("reportLibrary/createlabel/")] [HttpPost] public DTOs.ReportLabel CreateLabel(DTOs.ReportLabel json) { DTOs.ReportLabel result = new DTOs.ReportLabel(); //.... do stuff return result; }
ReportLabel(dto)的定义如下:
public class ReportLabel{ public Int64 LabelId { get; set; } public string LabelName { get; set; } public bool IsPublic { get; set; } public IEnumerable<Report> Reports { get; set; }//placeholder?}
我遇到的问题是,当我从我的角度服务发布对象时,该对象在API中显示为null。如果我将方法的类型更改为JToken或JObject之类的值,则会出现值。
谁能帮助我理解为什么当我定义不从angular传递过来的类型时?
谢谢
答案1
小编典典看来您可能正在执行额外的步骤。您不需要在json中编码,然后在json中传递
return $http.post(''reportLibrary/createlabel/'', { LabelId: 101, LabelName: ''myname'' }, {
然后
public DTOs.ReportLabel CreateLabel([FromBody]ReportLabel reportLabel)
看一下经过的网络值,您应该在调试工具或提琴手中看到实际发布的值(表单值)。
ASP.NET WEB API:如果禁用了 CORS,为什么我可以从 localhost 发布到 web api?
如何解决ASP.NET WEB API:如果禁用了 CORS,为什么我可以从 localhost 发布到 web api?
场景:
CORS 已禁用。 API 托管在 Azure 中。为什么我可以从我的机器发布到 web api,我认为是 localhost 域?如果我完全误解了 CORS 的作用,有人可以告诉我吗?
谢谢!
解决方法
虽然 CORS 是在服务器上配置的,但由客户端来强制执行。
大多数网络浏览器都会强制执行它,如果服务器上未启用它,则会回退到同源策略。
如果您使用 Postman 等 HTTP 客户端或在其他应用程序中运行的代码发出请求,则 CORS 不是一个因素。
asp.net WebApi WebApiConfig.cs Web API 配置和服务
public static void Register(HttpConfiguration config)
{
...............................
var jsonSettings = config.Formatters.JsonFormatter.SerializerSettings;
//获取或设置在序列化和反序列化期间如何处理空值。
jsonSettings.NullValueHandling = NullValueHandling.Ignore;//在序列化和反序列化对象时忽略空值。
// 移除XML序列化器
config.Formatters.Remove(config.Formatters.XmlFormatter);
config.Formatters.JsonFormatter.Indent = true;
// 解决json序列化时的循环引用问题
config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
// 对 JSON 数据使用混合大小写。驼峰式,但是是javascript 首字母小写形式.
config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver();
//日期格式
var dateTimeConverter = new Newtonsoft.Json.Converters.IsoDateTimeConverter {
DateTimeFormat = "yyyy-MM-dd HH:mm:dd"
};
config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(dateTimeConverter);
...............................
}
Asp.net WebApi WebApiConfig.cs(Web API 配置和服务)
public static void Register(HttpConfiguration config)
{
//...............................
var jsonSettings = config.Formatters.JsonFormatter.SerializerSettings;
//获取或设置在序列化和反序列化期间如何处理空值。
jsonSettings.NullValueHandling = NullValueHandling.Ignore;//在序列化和反序列化对象时忽略空值。
// 移除XML序列化器
config.Formatters.Remove(config.Formatters.XmlFormatter);
config.Formatters.JsonFormatter.Indent = true;
// 解决json序列化时的循环引用问题
config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
// 对 JSON 数据使用混合大小写。驼峰式,但是是javascript 首字母小写形式.
config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new Newtonsoft.Json.Serialization.CamelCasePropertyNamesContractResolver();
//日期格式
var dateTimeConverter = new Newtonsoft.Json.Converters.IsoDateTimeConverter {
DateTimeFormat = "yyyy-MM-dd HH:mm:dd"
};
config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(dateTimeConverter);
//...............................
}
ASP.NET WebApi 学习与实践系列(1)---如何创建 WebApi
写在前面
最近在做一个app的时候发现需要写后台服务。所以,在考虑是使用webapi还是使用webserver来写这个后台服务的时候。爱纠结的我,最后还是选择了使用webapi来写这个后台服务。 原因有二
1.webapi 使用的是http的通讯协议想比于webserver soap通讯协议会更好。
2.webapi 是无状态的,所以,它会比webserver更轻量。
3.webapi 目前支持post,get,等http请求。
为了以后工作的需要,mark学习webapi的整个过程。废话不多说,来创建我们的第一个webapi程序吧。
创建webapi服务
1.首先,打开 vs 2013 选择文件-->新建-->项目。
2.选择 Visual C# Web -->选择ASP.NET Web 应用程序-->输入项目名称MyWebApi_01-->点击浏览(选择项目存放的地方)-->点击确定。
然后会弹出类似于这样选择的窗体
3.选择Empty-->Web Api-->确定。
就完成了创建一个新的web api 的后台应用程序服务了。
注意:现在的是一个空的应用程序。我们还需要做些简单的配置。才能正常的运行这个程序。
创建webapi控制器
1.首先,我们需要创建一个新的api控制器。
2.选择Controllers文件夹鼠标右键-->添加-->控制器
3.选择web api 2控制器-空-->添加
4.输入控制名称-->确定
5.完成一个控制器的添加
webapi 配置
1.打开App_Start文件夹-->WebApiConfig右键-->修改webapi路由
webapi 输出
打开Home控制器,编辑
[httpGet]
public IEnumerable<string> InputString(){
return new string[] { "hellow world" };
}
最后,在浏览器中输入请求的路由 api/home/InputString 。
输出hellow wolrd,证明整个web api 创建已经完成。
今天关于如何将对象发布到WebAPI和如何将对象写入文件的分享就到这里,希望大家有所收获,若想了解更多关于ASP.NET WEB API:如果禁用了 CORS,为什么我可以从 localhost 发布到 web api?、asp.net WebApi WebApiConfig.cs Web API 配置和服务、Asp.net WebApi WebApiConfig.cs(Web API 配置和服务)、ASP.NET WebApi 学习与实践系列(1)---如何创建 WebApi等相关知识,可以在本站进行查询。
本文标签: