本文将介绍asp.net-web-api2–WebApi2Post–UrlHelper.Link不能返回null的详细情况,特别是关于controllerreturn无法返回jsp的相关信息。我们将通
本文将介绍asp.net-web-api2 – Web Api 2 Post – UrlHelper.Link不能返回null的详细情况,特别是关于controller return无法返回jsp的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于AntiForgery令牌使用ASP.NET5 Web API而不使用NET46上的System.Web.Helpers、asp.net web-api – ASP.net Web API RESTful Web服务基本身份验证、asp.net WebApi WebApiConfig.cs Web API 配置和服务、Asp.net WebApi WebApiConfig.cs(Web API 配置和服务)的知识。
本文目录一览:- asp.net-web-api2 – Web Api 2 Post – UrlHelper.Link不能返回null(controller return无法返回jsp)
- AntiForgery令牌使用ASP.NET5 Web API而不使用NET46上的System.Web.Helpers
- asp.net web-api – ASP.net Web API RESTful Web服务基本身份验证
- asp.net WebApi WebApiConfig.cs Web API 配置和服务
- Asp.net WebApi WebApiConfig.cs(Web API 配置和服务)
asp.net-web-api2 – Web Api 2 Post – UrlHelper.Link不能返回null(controller return无法返回jsp)
以下是插入的默认路线和帖子.当我调用帖子时,记录在数据库中完美创建,但是“CreatedAtRoute”调用返回500错误,说明:
ExceptionMessage: “UrlHelper.Link must not return null.”
ExceptionType: “system.invalidOperationException”
为什么会收到这个错误?
[RoutePrefix("api/casenotes")] public class CasenoteController : ApiController... // POST api/Casenote [Route("")] [ResponseType(typeof(client_admission_casenote))] public async Task<IHttpActionResult> Postclient_admission_casenote (client_admission_casenote client_admission_casenote) { Request.GetRequestContext().IncludeErrorDetail = true; if (!ModelState.IsValid) { return BadRequest(ModelState); } db.client_admission_casenote.Add(client_admission_casenote); await db.SaveChangesAsync(); return CreatedAtRoute("DefaultApi",new { id = client_admission_casenote.casenote_id },client_admission_casenote); }
解决方法
[Route(“api / books / {id}”,Name =“GetBookById”)]
并使用您的url.link()调用的路由名称
看到这里的细节.. http://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2#route-names
AntiForgery令牌使用ASP.NET5 Web API而不使用NET46上的System.Web.Helpers
我找到的所有文章都来自this article并使用System.Web.Helpers.AntiForgery.GetTokens,这不应该是ASP.NET5的方式
private static string GetTokenHeaderValue() { string cookietoken,formToken; System.Web.Helpers.AntiForgery.GetTokens(null,out cookietoken,out formToken); return cookietoken + ":" + formToken; }
是否有任何实现实际显示如何在ASP.NET5中检索这些令牌
其他来源ASP.NET5 AntiForgery Source Code
解决方法
using Microsoft.AspNet.Mvc; using Microsoft.Framework.DependencyInjection; namespace MyApp.App.Controllers { public class MyController : Controller { public string GetAntiForgeryTokens() { var antiForgery = Context.RequestServices.GetService<AntiForgery>(); AntiForgeryTokenSet antiForgeryTokenSet = antiForgery.GetTokens(Context,null); string output = antiForgeryTokenSet.Cookietoken + ":" + antiForgeryTokenSet.FormToken; return output; } } }
在View中生成
@inject AntiForgery antiForgery @functions { public string GetAntiForgeryTokens() { AntiForgeryTokenSet antiForgeryTokenSet = antiForgery.GetTokens(Context,null); string output = antiForgeryTokenSet.Cookietoken + ":" + antiForgeryTokenSet.FormToken; return output; } } <body> @GetAntixsrftoken() </body>
验证
var antiForgery = Context.RequestServices.GetService<AntiForgery>(); antiForgery.Validate(Context,new AntiForgeryTokenSet(formToken,cookietoken));
asp.net web-api – ASP.net Web API RESTful Web服务基本身份验证
我的第一个尝试是手动,解析授权头,解码和验证用户对我的数据库。它的工作,但我不知道,如果我缺少的东西。
我见过一些使用用户角色和原则的解决方案。虽然我不知道这些实际做什么,我几乎肯定我不会需要这些,因为在我的数据库中,我定义了我自己的用户和他们的角色。
还有我还没有完全理解,是如果服务的消费者必须发送凭证与每个请求或他们以某种方式缓存。我的服务应该做些什么才能发生,还是完全由消费者来处理?
最后一个问题关于客户使用javascript请求。如果他们尝试使用该服务,是否会出现任何“跨域请求”问题?
解决方法
从我的理解,如果你想要你的请求是无状态的,那么每个请求将需要设置验证字段
Jamie Kurtze在从DelegateHandler派生的类中包装必要的代码,而Rick Strahl使用过滤器检查调用是否有效。你可以在他的博客文章阅读更多在这个主题在A WebAPI Basic Authentication Authorization Filter
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-web-api2 – Web Api 2 Post – UrlHelper.Link不能返回null和controller return无法返回jsp的介绍到此结束,谢谢您的阅读,有关AntiForgery令牌使用ASP.NET5 Web API而不使用NET46上的System.Web.Helpers、asp.net web-api – ASP.net Web API RESTful Web服务基本身份验证、asp.net WebApi WebApiConfig.cs Web API 配置和服务、Asp.net WebApi WebApiConfig.cs(Web API 配置和服务)等更多相关知识的信息可以在本站进行查询。
本文标签: