我正在尝试构建一个安全的asp.net web api.您可以找到很多方法来保护您的API,但我想知道什么是最好的方法或"行业标准"来实现我的情况.
这些是我的要求 - 少数第三方开发人员将使用API来处理网站/移动应用程序等. - 想要使用此API的开发人员必须获得访问API(授权)的密钥 - 用户(访客/消费者)必须登录第三方应用程序才能查看其个性化信息. - API将使用ASP成员资格数据库来管理/验证用户.
我知道可以使用http基本身份验证来验证用户身份,但是如何实现API的授权部分呢?
OAuth 2.0是一个解决方案吗?
我正在构建一个.NET WebApi项目.我的一个ApiControllers返回一个数据表.在JSON格式中,它看起来都很好,但XML格式包含我不需要的垃圾.
所以,我在想,让我们编写自己的XML序列化.为此,我创建了一个实现IXmlSerializable的新类.它看起来像这样:
public class MyDataTable : IXmlSerializable
{
public MyDataTable(DataTable datatable)
{
this.Data = datatable;
}
public void WriteXml(XmlWriter writer)
{
writer.WriteStartElement("Test");
writer.WriteElementString("T", "hello world");
writer.WriteEndElement();
}
public XmlSchema GetSchema()
{
return null;
}
public void ReadXml(XmlReader reader)
{
throw new NotImplementedException();
}
public DataTable Data { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在我的XML看起来很棒,但我的JSON不是.JSON看起来像:
{"Data":[{"id":1,"name":"John"},{"id":2,"name":"Julia"}]}
Run Code Online (Sandbox Code Playgroud)
我真正想要的是这个:
[{"id":1,"name":"John"},{"id":2,"name":"Julia"}]
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法可以从JSON结果中删除"Data"字符串,而无需重写整个内容?或者是否有比这更好的解决方案?
我要做的是针对XSD验证XML.这一切都非常简单,但我遇到了没有命名空间的XML问题.如果命名空间与XSD的targetnamespace匹配,则C#仅验证xml.这似乎是正确的,但是没有命名空间的XML或者SchemaSet不同的XML应该给出异常.有没有财产或设置来实现这一目标?或者我是否必须通过读取xml的xmlns属性来手动获取命名空间?
一个清除的例子:
码:
XmlReaderSettings settings = new XmlReaderSettings();
settings.Schemas.Add("http://example.com", @"test.xsd");
settings.Schemas.Add("http://example.com/v2", @"test2.xsd");
settings.ValidationType = ValidationType.Schema;
XmlReader r = XmlReader.Create(@"test.xml", settings);
XmlReader r = XmlReader.Create(new StringReader(xml), settings);
XmlDocument doc = new XmlDocument();
try
{
doc.Load(r);
}
catch (XmlSchemaValidationException ex)
{
Console.WriteLine(ex.Message);
}
Run Code Online (Sandbox Code Playgroud)
XSD:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://example.com" targetNamespace="http://example.com" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="test">
<xs:annotation>
<xs:documentation>Comment describing your root element</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="[0-9]+\.+[0-9]+" />
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:schema>
Run Code Online (Sandbox Code Playgroud)
有效的XML:
<test xmlns="http://example.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">112.1</test>
Run Code Online (Sandbox Code Playgroud)
无效的XML,这将无法验证:
<hello xmlns="http://example.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">112.1</hello>
Run Code Online (Sandbox Code Playgroud)
错误:The …