小编Jea*_*anD的帖子

ASP.NET Web API授权和身份验证

我正在尝试构建一个安全的asp.net web api.您可以找到很多方法来保护您的API,但我想知道什么是最好的方法或"行业标准"来实现我的情况.

这些是我的要求 - 少数第三方开发人员将使用API​​来处理网站/移动应用程序等. - 想要使用此API的开发人员必须获得访问API(授权)的密钥 - 用户(访客/消费者)必须登录第三方应用程序才能查看其个性化信息. - API将使用ASP成员资格数据库来管理/验证用户.

我知道可以使用http基本身份验证来验证用户身份,但是如何实现API的授权部分呢?

OAuth 2.0是一个解决方案吗?

authentication rest authorization oauth-2.0 asp.net-web-api

18
推荐指数
2
解决办法
2万
查看次数

.NET WebApi + DataTable

我正在构建一个.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"字符串,而无需重写整个内容?或者是否有比这更好的解决方案?

datatable json.net

6
推荐指数
1
解决办法
9078
查看次数

.NET中的XML验证和命名空间

我要做的是针对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 …

c# xsd-validation

5
推荐指数
1
解决办法
4208
查看次数