小编Rei*_*Wit的帖子

如何使用C#创建到api的JSON帖子

我正在创建一个C#控制台应用程序,它从文本文件中读取文本,将其转换为JSON格式的字符串(保存在字符串变量中),并且需要将JSON请求POST到Web api.我正在使用.NET Framework 4.

我的奋斗是使用C#创建请求并获得响应.什么是必要的基本代码?代码中的注释会很有帮助.到目前为止我得到的是下面的内容,但我不确定我是否走在正确的轨道上.

//POST JSON REQUEST TO API
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("POST URL GOES HERE?");

request.Method = "POST";
request.ContentType = "application/json";

System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();
byte[] bytes = encoding.GetBytes(jsonPOSTString);

request.ContentLength = bytes.Length;

using (Stream requestStream = request.GetRequestStream())
{
    // Send the data.
    requestStream.Write(bytes, 0, bytes.Length);
}

//RESPONSE HERE
Run Code Online (Sandbox Code Playgroud)

c# post json httpwebrequest

16
推荐指数
1
解决办法
10万
查看次数

Tridion 2011 CoreService中的BasedOnSchemas选项

我试图理解OrganizationalItemItemsFilterData过滤器中的BasedOnSchemas选项的用途.

文档清楚地说明:"获取或设置BasedOnSchemas条件以仅返回使用给定模式的项目"因此,应该只能检索特定模式的组件,对吧?

这是我的代码:

LinkToSchemaData[] schemaLinks = new[] { 
        new LinkToSchemaData { IdRef = "tcm:113-362325-8" } 
    };

OrganizationalItemItemsFilterData filter = 
    new OrganizationalItemItemsFilterData();

filter.BaseColumns = ListBaseColumns.Extended;
filter.ItemTypes = new ItemType[] { ItemType.Component };
filter.Recursive = true;
filter.BasedOnSchemas = schemaLinks;

XElement items = client.GetListXml("tcm:113-14192-2", filter);
Run Code Online (Sandbox Code Playgroud)

items但是,XElement 将包含多种类型的组件,而不仅仅是schema tcm:113-362325-8

如何只检索基于我的架构的组件?

tridion tridion-2011

9
推荐指数
1
解决办法
778
查看次数

模拟 CloudBlockBlob 并让它返回一个流

我正在尝试 Moq 一个 AzureCloudBlockBlob并让它返回一个,Stream以便我可以测试我的BlobStorage存储库是否正确处理输出。

但不知何故,返回的流总是空的。

单元测试代码:

//....

var stream = new MemoryStream();
var writer = new StreamWriter(stream);
writer.Write("sample data");
writer.Flush();
stream.Position = 0;

var blobMock = new Mock<CloudBlockBlob>(new Uri("http://tempuri.org/blob"));
blobMock
    .Setup(m => m.ExistsAsync())
    .ReturnsAsync(true);
blobMock
    .Setup(m => m.DownloadToStreamAsync(It.IsAny<MemoryStream>()))
    .Returns(Task.FromResult(stream));

//....
Run Code Online (Sandbox Code Playgroud)

存储库代码:

//....

var blob = GetContainer(container).GetBlockBlobReference(name);
if (await blob.ExistsAsync())
{
    var ms = new MemoryStream();
    await blob.DownloadToStreamAsync(ms);
    ms.Seek(0, SeekOrigin.Begin);
    return ms;
}

//....
Run Code Online (Sandbox Code Playgroud)

所以我返回MemoryStream ms的总是一个空流,而不是stream我在 MoqReturns()方法中使用的对象。

我怎样才能让那个 blob …

c# moq azure-storage asp.net-core

8
推荐指数
1
解决办法
5046
查看次数

如何在Tridion的联系人视图中添加选项卡?

SDL Tridion 2011 SP1

我正在尝试使用GUI扩展将标签页添加到Tridion中的ContactView页面.我设法使用以下命令将扩展添加到ComponentView:

<ext:tabpages>
  <ext:add>
    <ext:extension assignid="ContactWishlist" name="Wishlist Info"
                   insertbefore="InfoTab">
      <ext:control>/WebUI/Editors/ContactWishlist/ContactWishlist.ascx</ext:control>
      <ext:pagetype>ContactWishlist.WishlistInfo</ext:pagetype>
      <ext:dependencies>
        <cfg:dependency>ContactWishlist.WishlistInfo</cfg:dependency>
      </ext:dependencies>
      <ext:apply>
        <ext:view name="ComponentView">
          <ext:control id="MasterTabControl"/>
        </ext:view>
      </ext:apply>
    </ext:extension>
  </ext:add>
</ext:tabpages>
Run Code Online (Sandbox Code Playgroud)

但当我将'ComponentView'更改为'ContactView'时,Contact屏幕中的'Info'选项卡前面没有显示任何内容(也没有错误).出站电子邮件是否需要不同的GUI扩展设置?

tridion

7
推荐指数
1
解决办法
137
查看次数

是否有必要用2011年的模板替换默认的2009模板构建块?

我们目前正在从SDL Tridion 2009迁移到2011 SP1.就模板而言,我们只有1个问题与默认的出站电子邮件TBB有关,而且这个问题很容易通过更新旧的2009默认出站电子邮件TBB与新问题来解决.

我们还没有任何其他问题.

是否有必要更新所有模板以开始使用新的2011默认模板构建块?保持一切都是最新的显然是一种很好的做法,但逻辑上是否也有任何变化?

tridion tridion-2011

7
推荐指数
1
解决办法
95
查看次数

Tridion 2011 SP1 richtext XSLT中的命名空间问题,浏览器不受支持

我在模式(Tridion 2011 SP1)中有一个richtext字段,附带了一个基本的XSLT过滤器(默认的XSLT或自定义的XSLT,对于这个问题无关紧要).

在IE9中,当我基于该模式创建组件时,Source选项卡中的XHTML被渲染得很好,没有任何名称空间,例如:

<p>a paragraph</p>
<p>
    <a href="http://www.sdltridion.com">a link</a>
</p>
Run Code Online (Sandbox Code Playgroud)

我能够保存组件.

但是在Firefox(16.0.2,不支持)中,命名空间在"源"选项卡中呈现:

<p xmlns="http://www.w3.org/1999/XSL/Transform">a paragraph</p>
<p xmlns="http://www.w3.org/1999/XSL/Transform">
    <a href="http://www.sdltridion.com">a link</a>
</p>
Run Code Online (Sandbox Code Playgroud)

这导致以下XML验证错误:

The element 'Paragraph' in namespace 'http://www.yme.com/GeneralContent' has invalid child element 'p' in namespace 'http://www.w3.org/1999/XSL/Transform'. List of possible elements expected: any element in namespace 'http://www.w3.org/1999/xhtml'..

Now I know that it's an unsupported version of a Firefox, but where is this namespace coming from? The namespace defined in the Richtext XSLT is http://www.w3.org/1999/XSL/Transform...

And does anyone know of …

xslt tridion tridion-2011

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

Tridion 2011中的Session.GetObject返回不存在项的组件

我试图弄清楚如何检查自定义后端中的组件是否为空(例如,在Tridion中找不到).我只是没有看到如何检查这个,除了捕获错误.

Component comp = (Component)session.GetObject(base.ComponentUri);

if (component != null)
{
    bool isCheckedOut = component.IsCheckedOut;
}
else
{
    // how do I get in here!
}
Run Code Online (Sandbox Code Playgroud)

我100%确定uri是正确的('tcm:113-438134')并且100%确定Tridion中没有带有该URI的项目.上面的代码将在component.IsCheckedOut上抛出一个错误:

The item tcm:113-438134-16 does not exist.
Run Code Online (Sandbox Code Playgroud)

如何检查Tridion项目的存在?我已经尝试将演员放在最后,这没有多大帮助:

Component comp = session.GetObject(base.ComponentUri) as Component;
Run Code Online (Sandbox Code Playgroud)

我尝试过根本不使用可识别对象,但也没有任何区别.谁知道怎么做?

tridion tridion-2011

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

如何在Tridion 2011 CoreService中使用ClassifiedItemsFilterData文件夹?

我正在重写.NET后端应用程序,以便它使用Tridion 2011 CoreService.有一部分它会在Tridion中获得一个使用特定关键字的文件夹.在当前的设置中,这是通过在关键字本身上调用方法'GetListClassifiedItems'来完成的,但我想如何使用CoreService执行此操作?

CoreService API中有一个ClassifiedItemsFilterData,但我该如何使用它?

我试过这段代码:

ClassifiedItemsFilterData filter = new ClassifiedItemsFilterData()
{
    ItemTypes = new ItemType[] { ItemType.Folder }
};

XElement list = client.GetListXml("tcm:113-363331-1024", filter);
Run Code Online (Sandbox Code Playgroud)

但它只返回关键字本身,URI tcm:113-363331-1024,而不是使用它分类的文件夹.

如果我也将组件ItemType添加到过滤器中,我将获得已使用此keywordk分类的所有组件,但仍然不是该文件夹.

我如何获得该文件夹?

tridion tridion-2011

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

如何将xsi:type属性添加到XML元素

如何在xml元素中添加xsi:type。

我正在用C#编写例程,该例程正在使用XmlSerializer序列化Xml文件。一切似乎都很好,除了我最初认为是次要的东西,但事实并非如此。

这是我的代码,

public class OuterElement
        {
            public string firstElement { get; set; }

            public string secondElement { get; set; }

            public InnerElement innerElement = new InnerElement();
        }

        public class InnerElement
        {            
            [XmlAttribute(AttributeName="xsi:type")]
            public string type { get; set; }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            XmlSerializer serializer = new XmlSerializer(typeof(OuterElement));
            OuterElement outerElement = new OuterElement();
            outerElement.firstElement = "name";
            outerElement.secondElement = "CD";
            outerElement.innerElement.type = "testsample";

            using (TextWriter writer = new StreamWriter(@"G:\abc.xml"))
            {
                serializer.Serialize(writer, outerElement);
            }
        }
Run Code Online (Sandbox Code Playgroud)

'

我想要这样的xml, …

c# xml xml-serialization

3
推荐指数
1
解决办法
6021
查看次数

StreamReader 的 While 循环不起作用

表单在内部停止工作。返回cursor to c=s.Substring...while

StreamReader sr= new StreamReader("Unos.txt");
s = sr.ReadLine();
            c = s.Substring(s.IndexOf(',') + 2, (s.Length - s.IndexOf(',') + 2) - (s.Length - s.IndexOf('-') + 2));
            if ((String.Equals(cbRazred.SelectedItem.ToString(), c.Substring(0, (c.IndexOf('-')))) &&
                String.Equals(cbOdeljenje.SelectedItem.ToString(), odeljenje.ToString()))) lbSpisak.Items.Add(s.Substring(0, s.IndexOf(',')));
            while (s != null)
            {
                s = sr.ReadLine();
                c = s.Substring(s.IndexOf(',') + 2, (s.Length - s.IndexOf(',') + 2) - (s.Length - s.IndexOf('-') + 2));
                if ((String.Equals(cbRazred.SelectedItem.ToString(), c.Substring(0, (c.IndexOf('-')))) &&
                    String.Equals(cbOdeljenje.SelectedItem.ToString(), odeljenje.ToString()))) lbSpisak.Items.Add(s.Substring(0, s.IndexOf(',')));
            }
            sr.Close();
Run Code Online (Sandbox Code Playgroud)

c# streamreader while-loop

-8
推荐指数
1
解决办法
2941
查看次数